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

时间:2015-08-10 16:51:27

标签: c++ class scope resolution operator-keyword

以下示例来自Bjarne的书 - "使用C ++编程和原理" ,例子:

version := "0.1." + timestamper()

def timestamper() = {
  val today = Calendar.getInstance().getTime()
  new SimpleDateFormat("yyyyMMddHHmm").format(today)
}

我理解我在使用枚举时使用范围解析运算符作为名称空间,当在类中有类时,但我不理解的是,作用域解析运算符的目的是什么使用fstream fs; fs.open("foo",ios_base::in); fs.close(); fs.open("foo",ios_base::out); ios_base::in

3 个答案:

答案 0 :(得分:7)

  

使用ios_base::inios_base::out时范围解析运算符的用途是什么?

目的是,嗯,解决范围

指定此上下文中的符号inout位于范围[std::]ios_base内。

否则,你的编译器不会有你所谈论的inout最微弱的线索。

具体而言,在这种情况下,他们是班级std::ios_base的静态成员。

答案 1 :(得分:5)

查看范围解析运算符的一般方法是说您使用它来解析可以静态解析的事物。这包括您在问题中列出的内容,但也应包含其他内容。

最值得注意的是,您的列表不包含类的静态成员。这正是inout - 它们是static data members,因此您需要范围解析运算符来解决它们。适用性不仅限于静态数据成员:还使用范围解析运算符解析静态成员函数。

答案 2 :(得分:1)

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

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

e.g:

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);
}