【发布时间】:2021-05-01 14:20:33
【问题描述】:
在阅读了this question 接受的答案后,我想我理解了程序失败的原因,因为使用指令does not actually declare the entity i in the region。但是,使用声明 can be used just like any other name 和 acts like a declaration 引入的名称。
使用 GCC,这会失败
#include <iostream>
namespace X { int i = 1; }
using X::i;
int main() {
extern int i;
i = 2;
std::cout<<i;
}
但这是可以接受的
#include <iostream>
int i;
int main() {
extern int i;
i = 2;
std::cout<<i;
}
【问题讨论】:
-
嗯。 MSVC 接受第一个,但 clang-cl 不接受。
-
仅供参考 - 我没有投反对票。我只是为其他人添加了一些额外的信息。
-
@AdrianMole 对不起,我没有指责你,我只是不知道还有什么要补充的。如果您有建设性的批评,我将不胜感激。大约 10 分钟内投了 2 票而没有太多解释,这有点令人沮丧。
-
NP。 DV 对我和你一样都是一个谜。但是在 SO 上投票是匿名的,要求解释通常是徒劳的。
-
@AdrianMole Sigh 一旦这个问题有两次反对票,没有人会看它,所以我不仅失去了我所拥有的一点名声,没有太多解释,我可能也不会得到更多信息。有时在这里提出问题可能会令人沮丧,我付出了很多努力来具体化,引用其他来源/问题并提供示例。我不明白我做错了什么。
标签: c++ scope namespaces language-lawyer using-declaration