64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
namespace N1 {
namespace NA {
int i = 10;
}
}
namespace N2 {
int i = 20;
void fun() {
using namespace N1::NA;
cout << "i=" << i << endl;
//问题一:输出20,为什么不是输出10?
//问题二:既然输出20,为什么不会跟int i=30这行冲突?
}
}
int i = 30;
int main() {
using namespace N2;
fun();
cout << "i=" << i << endl; //问题三:编译通不过,注释后可以通过。为什么i变量会冲突?
return 0;
}
namespace C1
{
int i = 1;
namespace C2
{
int i = 2;
}
namespace C3
{
namespace C4
{
void f()
{
using namespace C2; // 将 C2::i 提升到 C1 空间中
//下面这句话直觉上是屏蔽了int i=1这个变量,实际上编译器将会提示:i 不明确,和i=1这行发生冲突
cout << i << endl;
}
}
}
}
但我现在遇到的问题比这更复杂一些,名字空间发生了嵌套,感觉跟堆栈应该有点关系,百度不到名空间嵌套方面的文章,所以来求助大家了
#include <iostream>
using namespace std;
namespace N1 {
namespace NA {
int i = 10;
}
}
namespace N2 {
int i = 20;
void fun() {
using namespace N1::NA;
cout << "i=" << i << endl;
//问题一:输出20,为什么不是输出10?
//问题二:既然输出20,为什么不会跟int i=30这行冲突?
}
}
int i = 30;
int main() {
using namespace N2;
fun();
cout << "i=" << i << endl; //问题三:编译通不过,注释后可以通过。为什么i变量会冲突?
return 0;
}
using指示具有将命名空间成员提升到包含命名空间本身和usin指示的最近作用域的效果
namespace myspace
{
int x = 0;
string y = "test";
}
int main() {
using namespace myspace;
//这里可以直接使用x和y
return 0;
}
using指示具有将命名空间成员提升到包含命名空间本身和usin指示的最近作用域的效果
好像两位大神忽略了这句话的作用,我的疑问主要也是集中在这句话上
cout << "i=" << i << endl;
int i=30
int i = 20;
cout << "i=" << ::i << endl;
cout << "i=" << N2::i << endl;