这样做是否正确? :
namespace name {
int name;
}
void proc(int name)
{
name::name = name;
}
int main()
{
int name = name::name;
return 0;
}
它适用于GCC。但是对于标准编译器和其他编译器来说这样可以吗?
答案 0 :(得分:4)
是的,没关系,我们需要了解范围解析运算符在此上下文中的工作原理。如果我们查看draft C++ standard部分3.4.3
合格的名称查找实际上有一个非常类似的示例,它说(强调我的):
如果嵌套名称说明符中的:: scope resolution运算符前面没有decltype-specifier,那么查找前面的名称::仅考虑其特化类型为<的名称空间,类型和模板< / strong>即可。如果找到的名称未指定名称空间或类,枚举或依赖类型,则程序格式错误。[示例:
class A {
public:
static int n;
};
int main() {
int A;
A::n = 42; // OK
A b; // ill-formed: A does not name a type
}
-end example]
答案 1 :(得分:1)
是的,这样做完全没问题。 命名空间的设计是为了在代码/项目的大小变大后解决这类问题。
Here是查看C ++内容的好地方。