gpt4 book ai didi

c++ - C++中的命名空间有效性

转载 作者:太空宇宙 更新时间:2023-11-04 16:16:06 25 4
gpt4 key购买 nike

我有一个关于 C++ 命名空间的简单问题。当我编译下面的一小段代码时出现错误。我不明白为什么。提前感谢您的帮助!

#include <iostream>
using namespace std;

int x=100;

namespace first
{
int x=1;
}
namespace second
{
int x=2;
}

int main(){

{
using namespace first;
cout<<x<<endl;
}

{
using namespace second;
cout<<x<<endl;
}

cout<<x<<endl;
}

如果我注释掉在全局范围内声明的x和最后一条语句。它工作正常。但在我看来,第一个 x 是在 std 命名空间中声明的,并且在声明它们的代码块之后,在 main 中使用命名空间 first 和 second 将无效(因此命名空间将再次成为 std )。所以上面的代码应该可以工作。我哪里错了?

最佳答案

But in my mind, the first x is declared in the std namespace

你的想法是错误的。 using namespace stdstd 起名字在全局命名空间中可用,这并不意味着在全局命名空间中声明的名称在 std 中.

x在全局命名空间中声明。

so the namespace will be std again

不,您文件中的任何内容都不在命名空间 std 中, 只有 <iostream> 的内容在命名空间 std 中.

错误是当您尝试使用 x 时范围内有两个不同的变量,::xfirst::x你可能指的是,所以它是模棱两可的。您可以使用 using 声明而不是 using 指令来消除歧义:

 {
using first::x;
cout<<x<<endl;
}

这表示在那个范围内 xfirst::x

关于c++ - C++中的命名空间有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22377573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com