为什么在 std::cout 中使用 "::" 运算符而不是"."运算符?

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

本文关键字:运算符 std cout 为什么      更新时间:2023-10-16

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

我们为什么要写

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

代替

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

我知道::运算符用于编辑类中的函数,但为什么在这种情况下使用它来调用std类中的一个函数,而不是。操作人员

::运算符是范围解析运算符。前缀可以是命名空间,也可以是类。

.运算符用于选择对象的成员。前缀是结构、并集或类类型的表达式(通常是该类型对象的名称)。

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

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

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

因此std::cout的意思是"名称空间std中的名称cout",而例如std::ios_base::binary是在名称空间std中的类ios_base的范围中定义的常数,并且foo.x是名为foo的对象的名为x的成员变量。

相关文章: