gpt4 book ai didi

c++ - 具有相同名称但范围不同的命名空间(例如 foo、bar::foo)如何工作?

转载 作者:行者123 更新时间:2023-12-04 16:58:48 26 4
gpt4 key购买 nike

如果有两个命名空间 FooBar并且有一个名为 Foo 的命名空间内Bar .如果我引用一个变量 Foo::i从内部 Bar会搜索i吗在两个 FooBar::Foo .如果没有,是否可以在 i 时让编译器在两个命名空间中搜索不存在于 Bar::Foo ?
更具体地说,在下面的例子中,我试图引用变量 i来自命名空间 a 中的 b 没有放置额外的 :: .我知道放::有效,我想看看是否有其他方法可以解决此问题。

#include <iostream>
#include <string>

namespace a {
int i = 1;
}

namespace b {
namespace a {
}

namespace c {
int j = a::i; // Doesn't work, need to use ::a::i;
}
}
int main()
{
std::cout << b::c::j << "\n";
}

最佳答案

如果可以改b::a ,那么您确实可以在 b::a 中提供某些声明来自 ::a作为后备:

namespace a {
int i = 1;
int j = 2;
}

namespace b {
namespace a {
namespace detail {
using ::a::i; // Selectively bring declarations from ::a here
}
using namespace detail; // Make the names in detail available for lookup (but not as declarations).
//int i = 2;
}

namespace c {
int j = a::i; // Uses ::a::i
// int k = a::j; // ERROR! We didn't bring ::a::j into b::a at all
}
}
Here it is live .
取消评论 b::a::i 的声明将改变输出。由于正确的声明优先于命名空间 using 指令引入的名称。

关于c++ - 具有相同名称但范围不同的命名空间(例如 foo、bar::foo)如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67803820/

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