考虑以下两个代码片段:
#include <iostream>
namespace
{
bool foo = false;
}
bool foo = true;
int main()
{
std::cout << foo << std::endl;
}
#include <iostream>
namespace A
{
namespace
{
bool foo = false;
}
bool foo = true;
}
int main()
{
std::cout << A::foo << std::endl;
}
在代码片段A中,
foo
在int main()
中的用法是模糊的,而在代码片段B中则不是。为什么会这样?
相关: 匿名命名空间的歧义
A
中添加void bar(){ std::cout << foo << '\n'; }
,那么相同的问题也会出现,但要注意添加的位置是相关的。例如,这个可以工作,而这个则不行。 - WhozCraig