为什么在 std::cout 中使用“::”运算符而不是“.”操作员?

Why is the "::" operator used in std::cout rather than the "." operator?

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

我们为什么要写

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

而不是

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

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

因为std不是一个对象而是一个命名空间,而scope resolution operator ::用于指定用于解析标识符的上下文或范围,在C++中可以是class 或命名空间。 . 运算符是成员访问运算符,用于访问对象成员而不是 class 或名称空间范围内的名称。

所以 std::cout 表示 'the name cout in the namespace std' 而例如 std::ios_base::binary 是在命名空间 [=10] class ios_base 范围内定义的常量=] 和 foo.x 是名为 foo.

的对象的名为 x 的成员变量

:: 运算符是作用域解析运算符。前缀可以是命名空间或 class.

. 运算符用于 select 对象的成员。前缀是结构、联合或 class 类型的表达式(通常是该类型对象的名称)。

std 是命名空间,而不是 class。即使它是 class,如果 cout 是那个 class 的静态成员,std::cout 仍然是正确的。 std.cout 仅当 std 是具有名为 cout.

成员的类型的 对象 时才是正确的

C++ 可能 已定义为对所有这些情况使用 .,但使用 :: 作为范围解析运算符和 . 作为成员 selection 运算符可以使代码更易于阅读,因为它更明确。 (还有其他语言对两者都使用 .。)