为什么类/结构具有自己的命名空间,可通过范围解析运算符访问?



我无意中注意到,您可以毫无意义地使用::操作符再次返回到原始结构/类,例如:

#include <iostream>
struct Test
{
static const int x = 5;
};
int main()
{
std::cout << Test::x;              // makes sense
std::cout << Test::Test::x;        // still works?
std::cout << Test::Test::Test::x;  // okay...
return 0;
}

这可以堆叠得越来越多。但是,不能用这种方式构造对象,因为编译器不会将其识别为类型,而是将其解释为class::构造函数。

Test::Test Obj; // error, not a type

如果里面有一个嵌套类,那么你仍然可以用这种方式引用它,并成功地构造一个对象。

我想知道是什么导致了这种情况,这是其他东西的副作用吗?它看起来毫无用处,但却让我很好奇。

这是注入类名,这里也问过类似的问题

最新更新