2016-07-23 12 views
0

私はC++が新しく、::演算子は名前空間を参照するために使用されることを理解しています。たとえば、次のオブジェクトの初期化では、ifstreamはstd名前空間のクラスですが、コンストラクタの2番目のパラメータは何を意味していますか? - ifstream :: in - 私の知識ifstreamはクラスであり、名前空間ではないので、説明してください。C++ ::演算子の定義

std::ifstream file(filename.c_str(), ifstream::in); 
+0

クラス内に他のクラス/ typedefs/staticメンバーを宣言することができます – Dutow

答えて

0
ifstream::in 

タイプios_base::openmodeのクラスios_baseの静的メンバであるios_base::inの別名です。これにより、開くモードを指定することができます。

スコープ演算子は、独自のスコープを持つため、名前空間だけでなくクラス/構造体にも適用されます。したがって、somename::、ここではsomenameは、名前空間またはクラス/構造体のいずれかになります。このクラスには、スコープ演算子でアクセスできる静的メンバーを持つことができます:somename::foo

+0

より正確に言うと、 'ios_base :: in'のエイリアスではなく、' ios_base'は 'ifstream'の遠隔公開祖先です。 'ifstream'が' ios_base'の公開属性も公開していることを意味します。どんなセマンティックな意味においてもエイリアシングはありません。 – Taywee