C++使用命名空间语句

发布于 2024-12-08 15:18:45 字数 399 浏览 0 评论 0原文

namespace MyNamespace
{
    static void foo1()
    {

    }
}

using namespace MyNamespace;

class MyClass
{
    void foo2()
    {
        ::foo1();
    }    
};

作用域解析操作::表示使用全局命名空间中的方法。这里我们可以使用::foo1()。这意味着方法 foo1() 位于全局命名空间中,对吗?

我的问题是,使用命名空间 ANAMESPACE_NAME 是否意味着我们将命名空间 ANAMESPACE_NAME 中的所有元素导入到全局命名空间中?

namespace MyNamespace
{
    static void foo1()
    {

    }
}

using namespace MyNamespace;

class MyClass
{
    void foo2()
    {
        ::foo1();
    }    
};

The scope resolution operation :: means using method in the global namespace. Here we can use ::foo1(). This means method foo1() is in the global namespace, am I right?

My question is, does using namespace ANAMESPACE_NAME mean we import all elements form the namespace ANAMESPACE_NAME into the global namespace?

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

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

发布评论

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

评论(4

梦幻的味道 2024-12-15 15:18:45

不。“使用命名空间 ANAMESPACE_NAME”意味着我们将所有元素导入到当前范围中。

你可以这样写:

namespace A {
    int i = 10, j = 20;
}

int f()
{
    using namespace A;  // injects names from A into the global scope.
    return i * j;       // uses i and j from namespace A.
}

int k = i * j; // Error: undefined variant i and j.

No. "using namespace ANAMESPACE_NAME" mean we import all elements into current scope.

You can write something like this:

namespace A {
    int i = 10, j = 20;
}

int f()
{
    using namespace A;  // injects names from A into the global scope.
    return i * j;       // uses i and j from namespace A.
}

int k = i * j; // Error: undefined variant i and j.
仅一夜美梦 2024-12-15 15:18:45

C++2003标准的3.4.3.4节有答案:

以一元范围运算符 :: (5.1) 为前缀的名称在以下位置查找
全局范围,在使用它的翻译单元中。名称应
在全局命名空间范围内声明或者应该是一个名称,其
由于使用指令,声明在全局范围内可见
(3.4.3.2)。

此段落在 C++11 FDIS 中几乎相同,因此这可能也适用于 C++11。

Section 3.4.3.4 of the C++2003 standard has an answer:

A name prefixed by the unary scope operator :: (5.1) is looked up in
global scope, in the translation unit where it is used. The name shall
be declared in global namespace scope or shall be a name whose
declaration is visible in global scope because of a using-directive

(3.4.3.2).

This paragraph is almost identical in the C++11 FDIS, so this probably also holds in C++11.

雅心素梦 2024-12-15 15:18:45

这里我们可以使用::foo1()。这意味着 foo1() 方法位于全局命名空间中,对吗?

是的,没错。这意味着调用全局命名空间中定义的名为foo1()的方法。
这称为限定命名空间查找

“使用命名空间 ANAMESPACE_NAME”是否意味着我们将 ANAMESPACE_NAME 命名空间中的所有元素导入到全局命名空间中?

是的,它将所有元素从 ANAMESPACE_NAME 命名空间导入到当前命名空间。
它被称为using 指令
如果您只想导入当前类型中的特定元素,请使用使用声明

格式为:

使用 ANAMESPACE_NAME::element_name;

Here we can use ::foo1(). This means method foo1() is in the global namespace, am I right?

Yes thats correct. It means call the method named foo1() defined in global namespace.
This is called as Qualified Namespace Lookup.

do "using namespace ANAMESPACE_NAME" mean we import all elements in the ANAMESPACE_NAME namespace into global namespace?

Yes, it imports all elements from the ANAMESPACE_NAME namespace in to current namespace.
It is called as an using directive.
If you want to import just specific element in current type use, using declaration.

format is:

using ANAMESPACE_NAME::element_name;

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