首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ios_base中使用C++时,范围解析操作符的用途是什么?

在ios_base中使用C++时,范围解析操作符的用途是什么?
EN

Stack Overflow用户
提问于 2015-08-10 16:51:27
回答 3查看 405关注 0票数 2

以下示例来自Bjarne的书“使用C++的编程和原则”,该示例:

代码语言:javascript
复制
fstream fs;
fs.open("foo",ios_base::in);
fs.close();
fs.open("foo",ios_base::out);

我知道我在名称空间中使用范围解析运算符,在使用枚举时,当类中有一个类时,但我不理解的是,在使用ios_base::inios_base::out时,范围解析运算符的用途是什么

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-10 16:56:25

查看范围解析操作符的一般方法是,使用它解决可以静态解析的问题。这包括您在问题中列出的内容,但也应该包括其他内容。

最值得注意的是,您的列表不包括类的静态成员。这正是inout的本质--它们是static data members,所以您需要使用范围解析操作符来解析它们。其适用性不限于静态数据成员:静态成员函数也使用范围解析操作符进行解析。

票数 5
EN

Stack Overflow用户

发布于 2015-08-10 16:55:06

在使用ios_base::inios_base::out时,范围解析操作符的用途是什么?

scope. 的目的是,嗯, 解决

它指定此上下文中的符号inout位于作用域[std::]ios_base中。

否则,您的编译器将没有您正在谈论的inout中最模糊的线索。

具体来说,在本例中,它们是类std::ios_base的静态成员。

票数 7
EN

Stack Overflow用户

发布于 2015-08-10 16:56:55

ios_base指的是类,特别是std::ios_base (参见标准中的C++11 27.5.3 ios.base )。ios_base::in被定义为类型为fmtflagsstatic constexpr变量。

因此,ios_base::inios_base::out以及朋友们只是命名常量变量。

例如:

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31925053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档