C++ 为什么是“:”:&引用;在std::cout中使用的运算符,而不是“cout”&引用;操作人员
这是一个相当基本的问题,但我已经被这个问题难住了一段时间 我们到底为什么要写作C++ 为什么是“:”:&引用;在std::cout中使用的运算符,而不是“cout”&引用;操作人员,c++,std,C++,Std,这是一个相当基本的问题,但我已经被这个问题难住了一段时间 我们到底为什么要写作 int main(){ std::cout << "HelloWorld!"; } 我知道::运算符用于编辑类中的函数,但为什么在本上下文中使用它来调用std类中的函数而不是。运算符?< /p> ,因为 STD < /C>不是对象,而命名空间和::/COD>用于指定上下文或范围,用于解析标识符,C++中的标识符可以是类或命名空间。运算符是成员访问运算符,用于访问对象的成员,而不是类或命名空间范围内
int main(){
std::cout << "HelloWorld!";
}
我知道::运算符用于编辑类中的函数,但为什么在本上下文中使用它来调用std类中的函数而不是。运算符?< /p> ,因为<代码> STD < /C>不是对象,而命名空间和
运算符是成员访问运算符,用于访问对象的成员,而不是类或命名空间范围内的名称
因此
std::cout
意味着“名称空间std
中的名称cout
”,而例如std::ios_base::binary
是在名称空间std
中的类ios_base
范围内定义的常量,foo.x
是名为x
的对象的成员变量<代码> fo ./P>< P>因为<代码> STD<代码>不是对象,而是命名空间,而
运算符是成员访问运算符,用于访问对象的成员,而不是类或命名空间范围内的名称
因此
std::cout
意味着“名称空间std
中的名称cout
”,而例如std::ios_base::binary
是在名称空间std
中的类ios_base
范围内定义的常量,foo.x
是名为x
的对象的成员变量foo
:
运算符是范围解析运算符。前缀可以是命名空间或类
操作符用于选择对象的成员。前缀是结构、联合或类类型的表达式(通常是该类型对象的名称)
std
是名称空间,而不是类。即使它是一个类,std::cout
如果cout
是该类的静态成员,那么它仍然是正确的<只有当std
是具有名为cout
的成员的类型的对象时,code>std.cout才是正确的
C++可以定义为在所有这些情况下使用
,但是使用:
作为范围解析运算符和
作为成员选择运算符可以使代码更易于阅读,因为它更显式。(还有其他语言同时使用
。运算符:
是范围解析运算符。前缀可以是命名空间或类
操作符用于选择对象的成员。前缀是结构、联合或类类型的表达式(通常是该类型对象的名称)
std
是名称空间,而不是类。即使它是一个类,std::cout
如果cout
是该类的静态成员,那么它仍然是正确的<只有当std
是具有名为cout
的成员的类型的对象时,code>std.cout才是正确的
C++可以定义为在所有这些情况下使用
,但是使用:
作为范围解析运算符和
作为成员选择运算符可以使代码更易于阅读,因为它更显式。(还有其他语言同时使用
。std
不是类。它是名称空间。
仅在左侧有值时使用。它意味着从该值的类中选择一个成员<代码> 和
,您就知道您正在处理对象。std
不是类。它是名称空间。
仅在左侧有值时使用。它意味着从该值的类中选择一个成员<代码> 和
,您就知道您正在处理一个对象。:
用于访问名称空间中的成员的方式与
用于访问类中的成员的方式相同吗?这是不正确的<代码>:用于类和名称空间。@M.M类可以是作用域解析运算符上下文中的“名称空间”。例如,嵌套类定义位于其封闭类的命名空间中。不,类不能是命名空间。一个类确实介绍了一个范围,这就是你的意思。@ M。M我一般使用的是,但是我承认C++的上下文中有一个更具体的含义,这是混淆的。我将修改我的答案。那么:
用于访问名称空间中的成员的方式是否与
用于访问类中的成员的方式相同?这是不正确的<代码>:用于类和名称空间。@M.M类可以是作用域解析运算符上下文中的“名称空间”。例如,嵌套类定义位于其封闭类的命名空间中。不,类不能是命名空间。一个类确实介绍了一个范围,这就是你的意思。@ M。M我一般使用的是,但是我承认C++的上下文中有一个更具体的含义,这是混淆的。我会修改我的答案。
int main(){
std.cout("HelloWorld!");
}