我对命名空间范围有一个简单的问题:
要从B内部访问typedef(在A中声明),我是否需要“使用命名空间A;”
即:
B.hpp:
using namespace A;
namespace A {
namespace B {
class MyClass {
typedeffed_int_from_A a;
};
}
}
这似乎是多余的......这是正确的吗?
答案 0 :(得分:4)
不,你不需要using
指令;由于B
嵌套在A
内,A
的内容在B
内时属于范围。
答案 1 :(得分:4)
要从B内部访问typedef(在A中声明),我是否需要“使用命名空间A;”
没有。
但是,如果在命名空间B
中定义了typedef或其他与namedef同名的符号,那么你需要写一下:
A::some_type a;
让我们做一个简单的实验来理解这一点。
请考虑以下代码:(必须阅读评论)
namespace A
{
typedef int some_type; //some_type is int
namespace B
{
typedef char* some_type; //here some_type is char*
struct X
{
some_type m; //what is the type of m? char* or int?
A::some_type n; //what is the type of n? char* or int?
};
void f(int) { cout << "f(int)" << endl; }
void f(char*) { cout << "f(char*)" << endl; }
}
}
int main() {
A::B::X x;
A::B::f(x.m);
A::B::f(x.n);
return 0;
}
输出:
f(char*)
f(int)
这证明m
的类型为char*
,而n
的类型为int
符合预期或意图。