一个非常基本的问题,但我已经被困了一段时间。
我们为什么要写
int main(){
std::cout << "HelloWorld!";
}
而不是
int main(){
std.cout("HelloWorld!");
}
我知道::运算符用于编辑类中的函数,但为什么在此上下文中使用它来调用std类中的函数而不是。操作
答案 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
的成员变量。