gpt4 book ai didi

c++ - 跨命名空间的 typedef 解析

转载 作者:可可西里 更新时间:2023-11-01 16:29:59 24 4
gpt4 key购买 nike

我目前对“使用(命名空间)”语句在 C++ 中的工作方式感到困惑。

我有:

//somewhere in included headers
typedef unsigned int uint;

namespace mine {
typedef unsigned int uint;
}
namespace other {
using namespace mine;
void foobar () {
uint offender = i;
}
}

结果(解释):
对“uint”的引用不明确。候选人是
typedef unsigned int uint

typedef unsigned int mine::uint

同时,当我这样做的时候

namespace other {
using namespace mine;
using mine::uint;

void foobar () {
uint offender = i;
}
}

一切正常。“使用标识符;”对我来说似乎很奇怪更改其他 typedef 定义的可见性(隐藏全局定义?)。谁能指出 C++ 中的哪种规则管理跨命名空间的 typedef 解析?

最佳答案

通过using-directive 可见的名称出现在最近的包含[- 直接或间接-] using-directive 和命名空间的封闭范围内. (7.3.4 [命名空间.udir])

这意味着在 other< 中的 using-directive 之后查找时,两个 uint 声明出现在全局命名空间范围内.

using-declaration 与任何其他声明一样,在它出现的范围内声明一个名称。这就是为什么在第二个示例中,using mine::uint; 隐藏了由 using namespace mine; 引入的 uint,因为后者似乎来自全局范围。

关于c++ - 跨命名空间的 typedef 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035504/

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