这样做是否正确? :是否有与名称空间名称相同的变量是正确的
namespace name {
int name;
}
void proc(int name)
{
name::name = name;
}
int main()
{
int name = name::name;
return 0;
}
它在GCC中有效。但是,标准版和其他编译器可以吗?
这样做是否正确? :是否有与名称空间名称相同的变量是正确的
namespace name {
int name;
}
void proc(int name)
{
name::name = name;
}
int main()
{
int name = name::name;
return 0;
}
它在GCC中有效。但是,标准版和其他编译器可以吗?
是的,这是好的,我们需要看看范围解析运算符如何在这种情况下工作。如果我们看一下draft C++ standard部分3.4.3
合格的名称查找实际上有一个非常类似的例子,它说(重点煤矿):
如果在一个嵌套的名称说明符A ::范围解析运算符不在前面加上decltype-specifier,查找名称前面的名称::仅考虑名称空间,类型和模板,其专业化类型为。如果发现没有指定命名空间或类,枚举,或依赖型的名称,程序是非法的构造。[实施例:
class A {
public:
static int n;
};
int main() {
int A;
A::n = 42; // OK
A b; // ill-formed: A does not name a type
}
末端示例]
是的,这样做完全没问题。 命名空间的字面意思是设计来解决这种问题,一旦代码/项目的规模变大。
Here是一个很好的检查C++的好地方。
不,[社区共识](http://meta.stackexchange.com/questions/194788/links-being-changed-to-cppreference-com)是cplusplus.com不是一个很好的参考,而[cppreference]( http://en.cppreference.com/w/)是。 –
感谢您的提醒。 –
对不起?当然。容易明白?我会说不。那些'name :: name = name'和'name = name :: name'这两行让我感到害怕。 – Proxy
@Proxy:当它在一个名为'name()'的函数中返回一个'struct name'时更有意义。通过减少源代码中的独特拼写数量,避免拼写错误。 Python减少了类型错误的数量。 –
@KerrekSB Python会减少类型错误的数量吗?根据我的经验,它只能将这些错误从编译时检测到运行时。 –