「std」って何なの?

このQ&Aのポイント
  • C++初心者が「std」について知りたいです。
  • 「std」は標準ライブラリの一部で、関数やクラスを利用するための名前空間です。
  • C++で標準ライブラリを使う際には「std::」を頭につける必要があります。
回答を見る
  • ベストアンサー

「std」てナニモノですか?(VC++.net初心者です)

今週からわかりもしないのに、VC++を組む事になりました。 大まかな概念を理解しながら、コーディングに入っていこうと思ってます。 (C/C++/VC++を同時進行で覚えるという、とても好ましくない方法で進めています) プロジェクトの構成 各種ファイルの役割 まではイロイロ調べてなんとか理解できました 標準ライブラリ ヘッダファイル からのクラス(または関数)のインクリードを調べているところで、煮詰まりました 「std」てナニモノですか? コーディングの練習でiostreamを使って簡単なクラスを使ったところ、「cout」や「endl」を使う時に頭語に「std::」を付けないとコンパイルでエラーになりました 標準ライブラリの関数を使う時に利用する 「namespace」みたいなモノですか? 正しく理解したいのでイロイロと調べてみましたが、答えがみつからずココに来ました 助言または良いサイトがあったら教えて下さい。 m(__)m

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

>「namespace」みたいなモノですか? というかnamespaceです。 std::は恐らくstandard(標準)の略ですが、 STLを含むC++が標準で提供している、関数なりテンプレートなりに使われる namespaceです。 名前の衝突を避けるため、std::のnamespaceをもっています。 特に問題ないならヘッダ、あるいはcppファイルの先頭で using namespace std;としておけばコーディングの手間は省けるでしょう。 (あまりヘッダにはかかないほうがいいですね、、、ほかにも影響がでるので) #include <iostream> using namespace std; int main(){ cout << "Hello World" << endl; }

konchikisho
質問者

お礼

有難う御座いました これからも、宜しくお願いします。

その他の回答 (1)

  • neuron-x
  • ベストアンサー率52% (139/266)
回答No.2

std はnamespaceです。 C++が作られたとき、C++の標準ライブラリは、全て std というnamespaceに入れられることになりました。 #1の方も書いておられますが、 using namespace std; とすることで、毎回、std::coutなどとしなくてよくなります。ただし、ヘッダファイルなどではおすすめしません。

konchikisho
質問者

お礼

やはりnamespaceでしたか、回答有難う御座います やっと開放されました!!

関連するQ&A

  • C++のnamespace stdについて

    C++のnamespace stdについて教えて下さい。 coutを使用する場合"iostream"をインクルードし、using namespaceでstd名前空間を使用します。 printfを使用する場合"cstdio"をインクルードし、using namespaceでstd名前空間を使用します。 どちらのインクルードファイルにもnamespace stdという風に同じ名前の名前空間を 使用しているのでしょうか? もしもそうだとしたらcstdio,iostreamの両方をインクルードしている場合 名前空間が競合してしまうのではないでしょうか? namespaceはjavaでいうパッケージにあたる物だと思っていたので、 これでは意味がないのではないかと思いました。 それとも意図的に同じ名前空間を定義している意味があるのでしょうか? C++を使い始めたばかりで戸惑っています。どなたかお答え頂ければありがたいです。

  • VC++でプログラムの勉強をしています。

    プログラムは最近はじめたばかりです。While文とif文を使ってクイズを作ってみたところ、一個目のsinで入力を求めているところから無限ループになってしまいました。色々調べてcin.cler()とsin.ignore()を入れたりもしてみましたが上手くいきませんでした。どこを間違えているのでしょうか? //クイズ #include <iostream> using namespace std; int main()//cin.clear();cin.ignore();???? { int a; int b; while(1) { cout<<"ネコ型のロボットが出てくるアニメといえば?"<<endl; cout<<"A)ドラえもん B)ドラエもん C)ほりえもん D)サザエさん"<<endl; cin>>a; if(a=='A') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){break;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} if(b!='Y'||'N'){cout<<"正しく入力してね!"<<endl;} } if(a=='B'||'C'||'D') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){cout<<"残念!!"<<endl;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} } if(a!='A'||'B'||'C'||'D'){cout<<"正しく入力してね!"<<endl;} } cout<<"正解!!"<<endl; }

  • 結果を報告しない?(void)

    #include<iostream> #include<string> using namespace std; void Aisatu(string n){ cout<<n<<"さん、こんばんわ"<<endl; } int main() { Aisatu("鈴木"); } 上のプログラムで、C++の学習書に「void」とは「この関数は結果をどこにも報告しない、ということ」と書いてありますが、私の理解では下のAisatu("鈴木");という外部の文字列を受け取りcout<<nに「報告」しているように感じられます。どうか解釈がうまくいきますようにご教授いただけないでしょうか。よろしくお願いします。

  • C++の最初のあたり

    例に自分の名前、生年月日、年齢、住所を画面に表示するプログラムを作ってみてくれませんか? そのプログラムのそれぞれの行にコメントを入れよと出てるんです まだやったばかりで文字の出力法くらいしかやってないですが… これどこが違うんですか #include<iostream> using namespace std; int main() {//main関数を定義する .... cout << "" ×○太郎 << endl ;//自分の名前 .... cout << "April 8, 19○○" << endl ;//生年月日 .... cout << "○○ years old" << endl ;//年齢 .... cout << "taitouku" << endl ;//住所を画面に表示 return 0; }//main関数の終わり そんな難しい事してないから、最初と最後の文はもうこれで行きます

  • VC++で

    VC++で #include <iostream> using namespace std; int main() { cout << "motona_\n"; cout << "画面出力\n"; } をビルドすると… 1>------ ビルド開始: プロジェクト: AA, 構成: Release Win32 ------ 1> AA.cpp 1>AA.cpp(18): error C2731: 'main' : 関数はオーバーロードできません。 1> AA.cpp(17) : 'main' の宣言を確認してください。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== と出てきてしまいます。 どこが間違ってるのでしょうか????C++を始めたばかりなんで全くわかりません

  • C++プログラム問題(初心者です)

    C++の勉強初めて1ヶ月ぐらいです。 以下にある問題がわかりません。 解説付きでお願いします。 [問題] 関数 funcのみを修正することで、標準出力に 2 が表示する。 [プログラム] #include <iostream> using namespace std; int func(int i) {return i;} int main() { int i = 1; cout << ++func(i) << "\n"; return 0; }

  • 標準ライブラリのcos関数の値がおかしいです。

    標準ライブラリのcos関数の値がおかしいです。 環境は OS:WindowsXP 言語:C++ 開発環境:Visual C++ ExpressiEdition です。 以下がサンプルコードです。 #include<iostream> #include<stdio.h> #include<math.h> int main(){ double y=cos(90.0 * 3.14159265358979323846264338327950288 / 180.0); printf("%lf\n",y); std::cout<<y<<std::endl; printf("%d\n",y*10); std::cout<<y*10<<std::endl; getchar(); return 0; } 上記のコードを実行すると、 0.000000 6.12323e-017 -1076268279 6.12323e-016 と出力されます。 本来なら、cos90の値は0ですから全て「0」と表示されると思うのですが・・・ 原因が分かる方がいらっしゃいましたら、教えていただけると助かります。

  • コマンドライン引数

    下記のリストの結果は自分の期待では「真」なのですが 「偽」となります。 なぜなのかわけが分からなくなって質問させて頂きまし た。 (なお後尾の2行はチェックするために入れただけです。) どなたかご教示願えませんでしょうか。 よろしくお願いします。 リスト #include <iostream> using namespace std; int main(int argc, char *argv[]) { if( argv[1] == "yes") { cout << "真です。" << endl; } else { cout << "偽です。" << endl; } cout << " argv[1] は " << argv[1] << " です。" << endl; cout << " argv[2] は " << argv[2] << " です。" << endl; }

  • std::cout << p と std::cout << *p の違

    std::cout << p と std::cout << *p の違いは? VC++でコードを書きながらC++を学んでいます。 ポインタで疑問に思ったことがあるので質問させて下さい。 int* p; int n = 100; p = &a; 上記のように変数を宣言・代入した場合、 std::cout << p と std::cout << *p のどちらでも"100"と表示されます。 これら二つの違いは何でしょうか? 本来*pとすべきところをpにしてもVC++が気を利かせて &pのアドレスに入っているデータを表示してくれているということでしょうか?

  • C++について。

    現在”猫でもわかるプログラミング”のC++編をSDKと共に勉強している身です。 現在第22章、第23章を勉強中です。 22章 http://www.kumei.ne.jp/c_lang/cpp/cpp_22.htm 23章 http://www.kumei.ne.jp/c_lang/cpp/cpp_23.htm 作業環境はVisual Studio 2005.net C++です 22章でのプログラムを作成し、実行した結果エラーが出てしまいました。 ソースです #include <iostream> class xy_position { int x; int y; public: xy_position(int x = 0, int y = 0){ xy_position::x = x; xy_position::y = y; } int X() const {return x;} int Y() const {return y;} }; ostream& operator << (ostream& o, const xy_position& p) { return o << "(" << p.X() << "," << p.Y() << ")"; } int main(void) { xy_position a(50, 60), b; std::cout << a << b << std::endl; return 0; } (17):error C2143: 構文エラー : ';' が '&' の前にありません。 (17):error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません (17):error C2065: 'o' : 定義されていない識別子です。 (17):error C2059: 構文エラー : 'const' (18):error C2143: 構文エラー : ';' が '{' の前にありません。 (18):error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?) (26):error C2679: 二項演算子 '<<' : 型 'xy_position' の右オペランドを扱う演算子が見つかりません (または変換できません)。 このようなエラーが出てしまいました。 もちろんソースは全て同様に書いています。 この”猫でも”で使用しているコンパイラと異なるために出たエラーでしょうか? それに単に cout << のように記述するとエラーが出てしまい、 std::cout << のように記述しなければ通りません。 また、エラーとは別の質問になってしまいますが、プログラム中に int X() const {return x;} という記述がありますが、このconstの意味が分かりません。 単純に return x が変更不可能という意味でしょうか? 次に23章についての質問です。 ここでもソースは同じなのに以下のようなエラーが出てしまいます。 ソースです。 #include <iostream> int main(void) { int x=10, y=15, z=20; std::cout << "16進表示" << std::endl; std::cout.setf(ios::hex); std::cout << x << std::endl; std::cout << y << std::endl; std::cout << z << std::endl; std::cout.unsetf(iostream::hex); std::cout << "8進数" << std::endl; std::cout.setf(ios::oct); std::cout << x << std::endl; std::cout << y << std::endl; std::cout << z << std::endl; return 0; } (8):error C2653: 'ios' : 識別子がクラス名でも名前空間名でもありません。 (8):error C2065: 'hex' : 定義されていない識別子です。 (13):error C2653: 'iostream' : 識別子がクラス名でも名前空間名でもありません。 (15):error C2653: 'ios' : 識別子がクラス名でも名前空間名でもありません。 (15):error C2065: 'oct' : 定義されていない識別子です。 これも何か設定をしなければいけないのでしょうか? なにぶんC++は・・・というかオブジェクト指向の言語は初心者なもので疑問も多いですorz