以下示例来自Bjarne的书“使用C++的编程和原则”,该示例:
fstream fs;
fs.open("foo",ios_base::in);
fs.close();
fs.open("foo",ios_base::out);我知道我在名称空间中使用范围解析运算符,在使用枚举时,当类中有一个类时,但我不理解的是,在使用ios_base::in和ios_base::out时,范围解析运算符的用途是什么
发布于 2015-08-10 16:56:25
查看范围解析操作符的一般方法是,使用它解决可以静态解析的问题。这包括您在问题中列出的内容,但也应该包括其他内容。
最值得注意的是,您的列表不包括类的静态成员。这正是in和out的本质--它们是static data members,所以您需要使用范围解析操作符来解析它们。其适用性不限于静态数据成员:静态成员函数也使用范围解析操作符进行解析。
发布于 2015-08-10 16:55:06
在使用
ios_base::in和ios_base::out时,范围解析操作符的用途是什么?
scope. 的目的是,嗯, 解决
它指定此上下文中的符号in和out位于作用域[std::]ios_base中。
否则,您的编译器将没有您正在谈论的in和out中最模糊的线索。
具体来说,在本例中,它们是类std::ios_base的静态成员。
发布于 2015-08-10 16:56:55
ios_base指的是类,特别是std::ios_base (参见标准中的C++11 27.5.3 ios.base )。ios_base::in被定义为类型为fmtflags的static constexpr变量。
因此,ios_base::in和ios_base::out以及朋友们只是命名常量变量。
例如:
class ios_base
{
public:
static constexpr fmtflags out = 1234 /* (or any other constant) */;
};
int main()
{
// Access static member `out` of class `ios_base`
printf("%d", ios_base::out);
}https://stackoverflow.com/questions/31925053
复制相似问题