[英]The evaluation of a scope resolution operator
这可能是一个愚蠢的问题。
我注意到我们将作用域解析运算符::
用于名称空间和静态成员函数。
1) std::printf("foo");
2) MyClass::foo();
这是我的问题:
1. C ++编译器如何区分它们?
2. C ++编译器看到作用域解析运算符时,其处理过程是什么?
详细信息在C ++规范的3.4.3合格名称查找中(带有3.3.1声明性区域和范围以及5.1.1(主表达式)常规也提供了一些有用的信息。)
归根结底,尽管名称空间和类都是“声明性区域”,所以在您的示例中, std::cout
引用了声明性区域std
的名称cout
,而MyClass::foo
引用了声明性区域中的名称foo
。名为MyClass
声明性区域。 就::
操作符而言,名称空间和类是“同一种东西”。
此外,由于名称在声明性区域(包括全局名称空间)内必须唯一,因此以下代码无效:
//invalid code - does not compile
namespace test { int x; }
class test { static int x; };
换句话说,在test::x
引用命名空间中的x或类中的x之间没有歧义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.