命名空间范围问题

发布于 2024-10-31 21:47:46 字数 375 浏览 0 评论 0原文

我有一个关于命名空间范围的简单问题:

  1. 我有两个命名空间 A 和 B,其中 B 嵌套在 A 内。
  2. 我在 A 内声明了一些 typedef。
  3. 我在 B 内声明了一个类(位于 A 内)

来访问 typedef(声明为在A)中,从B内部,我是否需要执行“使用命名空间A;”

即:

B.hpp:

using namespace A;

namespace A {
namespace B {

  class MyClass {

    typedeffed_int_from_A a;
  };

}
}

这似乎是多余的......这是正确的吗?

I have a quick question about namespace scope:

  1. I have two namespaces, A and B, where B is nested inside A.
  2. I declare some typedefs inside A.
  3. I declare a class inside B ( which is inside A )

To access the typedefs (declared in A), from inside B, do I need to do "using namespace A;"

ie:

B.hpp:

using namespace A;

namespace A {
namespace B {

  class MyClass {

    typedeffed_int_from_A a;
  };

}
}

This seems redundant... Is this correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

俯瞰星空 2024-11-07 21:47:46

要从 B 内部访问 typedef(在 A 中声明),我需要执行“使用命名空间 A;”

不可以


。但是,如果有一个 typedef 或其他与您的 typedef 同名的符号,在命名空间 B 中定义,那么您需要这样写:

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)

证明 mtypechar* 并且正如预期或预期,ntypeint

在线演示:http://ideone.com/abXc8

To access the typedefs (declared in A), from inside B, do I need to do "using namespace A;"

No.


However if there is a typedef or some other symbol with same name as your typedef, defined in the namespace B, then you need to write this:

A::some_type a;

Lets do a simple experiment to understand this.

Consider this code: (must read the comments)

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;
}

Output:

f(char*)
f(int)

That proves that type of m is char* and type of n is int as expected or intended.

Online Demo : http://ideone.com/abXc8

指尖微凉心微凉 2024-11-07 21:47:46

不,您不需要 using 指令;由于 B 嵌套在 A 内部,因此 A 的内容在 B 内部时也在作用域内。

No, you don't need a using directive; as B is nested inside of A, the contents of A are in scope when inside B.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文