为什么在 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 运算符可以使代码更易于阅读,因为它更明确。 (还有其他语言对两者都使用 .
。)
一个非常基本的问题,但我已经被这个问题难住了一段时间。
我们为什么要写
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 运算符可以使代码更易于阅读,因为它更明确。 (还有其他语言对两者都使用 .
。)