为什么" ::"在std :: cout中使用的运算符而不是"。"操作者?

时间:2015-11-05 03:23:49

标签: c++ std

一个非常基本的问题,但我已经被困了一段时间。

我们为什么要写

int main(){
   std::cout << "HelloWorld!";
}

而不是

int main(){
   std.cout("HelloWorld!");
}

我知道::运算符用于编辑类中的函数,但为什么在此上下文中使用它来调用std类中的函数而不是。操作

2 个答案:

答案 0 :(得分:4)

::运算符是作用域解析运算符。前缀可以是命名空间,也可以是类。

.运算符用于选择对象的成员。前缀是结构,联合或类类型的表达式(最常见的是该类型对象的名称)。

std是名称空间,而不是类。即使它是一个类,如果std::cout是该类的静态成员,cout仍然是正确的。仅当std.cout是具有名为std的成员的类型的对象时,cout才会正确。

C ++ 可以被定义为对所有这些情况使用.,但使用::作为范围解析运算符并使用.作为成员选择运算符可以使代码更容易阅读,因为它更明确。 (还有其他语言使用.。)

答案 1 :(得分:2)

因为var comp = bmiMetric (WithWeight: 75, andHeight: 1.78) comp.b comp.m print("BMI:",String(bmiMetric(WithWeight: 75, andHeight: 1.78).b!)+".") 不是对象而是命名空间,scope resolution operator std用于指定用于解析标识符的上下文或范围,在C ++中可以是类或命名空间。 ::运算符是成员访问运算符,用于访问对象的成员,而不是类或命名空间范围内的名称。

所以.表示'名称空间std::cout中的名称cout,而例如std是在类std::ios_base::binary范围内定义的常量在命名空间ios_base中,std是名为foo.x的对象的名为x的成员变量。