2016-07-23 89 views
0

我是新来的c + +,我明白::运算符用于引用命名空间。例如,在下面的对象初始化中,ifstream是std名称空间中的类,但构造函数中的第二个参数是什么意思? - ifstream :: in - 据我所知,ifstream是一个类而不是命名空间,所以请解释一下。C++ ::运算符定义

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

您可以在类中声明其他类/ typedefs/static成员 – Dutow

回答

0
ifstream::in 

是对ios_base::in的别名是在ios_base::openmode类型的ios_base类的静态成员。这使您可以指定打开模式。

范围运算符不仅适用于名称空间,而且适用于类/结构体,因为它们有自己的范围。因此,somename::,这里的somename既可以是一个命名空间,也可以是一个类/结构,它可以有静态成员,您可以通过范围操作符访问它们:somename::foo

+0

为了更加准确,它不是'ios_base :: in'的别名,而是'ios_base'是'ifstream'的一个遥远的公共祖先,它意味着'ifstream'还暴露了'ios_base'的公共属性。没有语义意义上的别名。 – Taywee