我无意中注意到,您可以毫无意义地使用::操作符再次返回到原始结构/类,例如:
#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
如果里面有一个嵌套类,那么你仍然可以用这种方式引用它,并成功地构造一个对象。
我想知道是什么导致了这种情况,这是其他东西的副作用吗?它看起来毫无用处,但却让我很好奇。
这是注入类名,这里也问过类似的问题