gpt4 book ai didi

C++ 拆分命名空间声明

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:10 25 4
gpt4 key购买 nike

我想知道命名空间是否可以拆分,或者命名空间的定义是否必须在单个 block 中。为了说明我的意思:

namespace test
{
//declare a bunch of stuff here
int a;
}

在这里我们做一些其他的事情,比如声明一个类或其他什么

class T
{
};

这里继续上面的命名空间,扩展它

namespace test
{
//declare a bunch of additional stuff here
int b;
T val;
}

在这个例子中,命名空间 test 被使用了两次,那么这是否意味着 test 被第二个定义扩展了?当我在 gcc 中这样使用它时,它按预期工作。我可以使用 test::... 访问所有变量,就好像它们是在单个命名空间中定义的一样。当然这不是标准,所以我想知道这是否符合标准。

令我惊讶的是我什至没有收到警告之类的。但这是否意味着您可以不小心使用已经使用过的名称而没有开始意识到它从而扩展它?

最佳答案

您当然可以这样做,C++11 标准 N3485 第 7.3.3.11 节中提供了一个示例

引用如下。

The entity declared by a using-declaration shall be known in the context using it according to its definition at the point of the using-declaration. Definitions added to the namespace after the using-declaration are not considered when a use of the name is made.

[ Example:

namespace A 
{
void f(int);
}
using A::f; // f is a synonym for A::f;
// that is, for A::f(int).
namespace A
{
void f(char);
}

void foo()
{
f(’a’); // calls f(int),
} // even though f(char) exists.

void bar()
{
sing A::f; // f is a synonym for A::f;
// that is, for A::f(int) and A::f(char).
f(’a’); // calls f(char)
}

—end example ]

关于C++ 拆分命名空间声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com