拥有与命名空间同名的变量是否正确

Is it correct to have a variable with the same name as a namespace

本文关键字:变量 是否 命名空间 拥有      更新时间:2023-10-16
这样做

正确吗?

namespace name {
    int name;
}
void proc(int name)
{
    name::name = name;
}
int main()
{
    int name = name::name;   
    return 0;
}

它在海湾合作委员会中工作。但是对于标准编译器和其他编译器,这可以吗?

是的,这没关系,我们需要看看范围解析运算符在这种情况下是如何工作的。如果我们看一下草案C++标准部分3.4.3限定名称查找实际上有一个非常相似的例子,它说(强调我的):

如果嵌套名称说明符中的 :: 范围解析运算符前面没有 decltype-说明符,则查找该 :: 前面的名称仅考虑专用化为类型的命名空间、类型和模板。如果找到的名称未指定命名空间或类、枚举或依赖类型,则程序格式不正确。[ 示例:

class A {
public:
    static int n;
};
int main() {
    int A;
    A::n = 42; // OK
    A b; // ill-formed: A does not name a type
}

—结束示例 ]

是的,这样做完全没问题。命名空间实际上是为了在代码/项目的大小变大后解决此类问题而设计的。

这是查看有关C++的好地方。