好问题!我学到了一些新的研究和实验。
你的评论是对的,::S(); //Is ::S a nested name specifier <-- Yes, Indeed!
当您开始创建命名空间时,您会喜欢上它。变量可以在命名空间中具有相同的名称,并且::
操作符是它们的区别。命名空间在某种意义上就像类,是另一层抽象。我不想让你厌烦命名空间。您可能不喜欢此示例中的嵌套名称说明符......考虑这个:
#include <iostream>
using namespace std;
int count(0); // Used for iteration
class outer {
public:
static int count; // counts the number of outer classes
class inner {
public:
static int count; // counts the number of inner classes
};
};
int outer::count(42); // assume there are 42 outer classes
int outer::inner::count(32768); // assume there are 2^15 inner classes
// getting the hang of it?
int main() {
// how do we access these numbers?
//
// using "count = ?" is quite ambiguous since we don't explicitly know which
// count we are referring to.
//
// Nested name specifiers help us out here
cout << ::count << endl; // The iterator value
cout << outer::count << endl; // the number of outer classes instantiated
cout << outer::inner::count << endl; // the number of inner classes instantiated
return 0;
}
请注意,我::count
在本来可以简单使用的地方使用了count
. ::count
指全局命名空间。
因此,在您的情况下,由于 S() 位于全局名称空间中(即,它在同一文件或包含的文件或未被 包裹的任何代码段中声明namespace <name_of_namespace> { }
,您可以使用new struct ::S
or new struct S
; 无论您喜欢哪个。
我刚刚了解到这一点,因为我很想回答这个问题,所以如果您有更具体和学过的答案,请分享:)