以下示例来自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
?
答案 0 :(得分:7)
使用
ios_base::in
和ios_base::out
时范围解析运算符的用途是什么?
目的是,嗯,解决范围。
指定此上下文中的符号in
和out
位于范围[std::]ios_base
内。
否则,你的编译器不会有你所谈论的in
和out
最微弱的线索。
具体而言,在这种情况下,他们是班级std::ios_base
的静态成员。
答案 1 :(得分:5)
查看范围解析运算符的一般方法是说您使用它来解析可以静态解析的事物。这包括您在问题中列出的内容,但也应包含其他内容。
最值得注意的是,您的列表不包含类的静态成员。这正是in
和out
- 它们是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::in
和ios_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);
}