C++ では、istream オブジェクトstd::cin
は header<iostream>
で宣言されていますが、どこで定義されていますか?
4 に答える
それが定義されている場所は、標準によって義務付けられているわけではなく、完全に実装次第です。
これが私の場所です:
$ nm -C /usr/local/lib64/libstdc++.so.6 | grep -w cin
0000000000305900 B std::cin
使用している実装は、それらを何らかの形で提供します。実行時の場所に関する詳細は実装定義ですが、それらへのアクセスは標準で定義されています。それらの有効期間とその動作は、同様に標準によって定義されています。
C++11 § 27.4.1(2)
クラス ios_base::Init のオブジェクトが最初に構築される前または構築中のいずれかの時点で、オブジェクトが構築され、関連付けが確立されます
main
。294プログラムの実行中にオブジェクトが破棄されません。295<iostream>
翻訳単位にインクルードした結果は、静的な保存期間<iostream>
を持つ のインスタンスが定義されているかのようになります。同様に、プログラム全体は、静的な保存期間ios_base::Init
を持つ のインスタンスが少なくとも 1 つあるかのように動作します。ios_base::Init
クラスのオブジェクトですistream
。したがって、使用するときは、型オブジェクトcin
を作成するだけです。istream
外部リンケージと静的期間があります。
標準入力ストリームは、環境によって決定される文字のソースです。keyboard
通常、やなどの外部ソースからの入力であると想定されますfile
。
クラス のオブジェクトとして、抽出演算子 ( ) を使用して書式設定されたデータとして、または などのメンバー関数を使用してistream
書式設定されていないデータとして、文字を取得できます。operator>>
read
コンパイラ ドライバ プログラムによって実行可能ファイルに自動的にリンクされるライブラリ内 (例:g++
またはclang++
)。