我是新来的c + +,我明白::运算符用于引用命名空间。例如,在下面的对象初始化中,ifstream是std名称空间中的类,但构造函数中的第二个参数是什么意思? - ifstream :: in - 据我所知,ifstream是一个类而不是命名空间,所以请解释一下。C++ ::运算符定义
std::ifstream file(filename.c_str(), ifstream::in);
我是新来的c + +,我明白::运算符用于引用命名空间。例如,在下面的对象初始化中,ifstream是std名称空间中的类,但构造函数中的第二个参数是什么意思? - ifstream :: in - 据我所知,ifstream是一个类而不是命名空间,所以请解释一下。C++ ::运算符定义
std::ifstream file(filename.c_str(), ifstream::in);
ifstream::in
是对ios_base::in
的别名是在ios_base::openmode
类型的ios_base
类的静态成员。这使您可以指定打开模式。
范围运算符不仅适用于名称空间,而且适用于类/结构体,因为它们有自己的范围。因此,somename::
,这里的somename
既可以是一个命名空间,也可以是一个类/结构,它可以有静态成员,您可以通过范围操作符访问它们:somename::foo
。
为了更加准确,它不是'ios_base :: in'的别名,而是'ios_base'是'ifstream'的一个遥远的公共祖先,它意味着'ifstream'还暴露了'ios_base'的公共属性。没有语义意义上的别名。 – Taywee
您可以在类中声明其他类/ typedefs/static成员 – Dutow