相关疑难解决方法(0)

什么是内联命名空间?

C++ 11允许inline namespaces,其所有成员也自动在封闭中namespace.我想不出任何有用的应用 - 有人可以给出一个简短,简洁的例子,说明inline namespace需要哪种情况以及最常用的解决方案?

(另外,当发生了什么并不清楚,我namespace声明inline在一个但不是所有的声明,这可能住在不同的文件.这难道不是找麻烦?)

c++ namespaces c++11 inline-namespaces

320
推荐指数
6
解决办法
5万
查看次数

为什么一个未命名的命名空间是静态的"优越"替代品?

C++标准中的$ 7.3.1.1/2节描述如下:

在声明命名空间作用域中的对象时,不推荐使用static关键字; unnamed-namespace提供了一个更好的选择.

我不明白为什么一个未命名的命名空间被认为是一个更好的选择?理由是什么?我已经知道标准的内容很长一段时间,但我从未认真考虑过,即使我回答这个问题:未命名的命名空间优于静态?

它是否被认为是优越的,因为它也可以应用于用户定义的类型,正如我在回答中所描述的那样?还是有其他原因,我不知道?我问这个问题,特别是因为这是我在答案中的推理,而标准可能会考虑其他因素.

c++ standards iso namespaces

86
推荐指数
3
解决办法
3万
查看次数

根据标准委员会的说法,为什么匿名命名空间不能完全替代namespace-static?

根据这个答案,命名空间范围的静态变量在C++ 11中是未被完美的.也就是说,它们在C++ 03中被弃用,因为匿名命名空间被认为更好.但是C++ 11对它们不予重视.

为什么?N3296将其原因列为:

不应该弃用在命名空间范围中使用静态.匿名命名空间不足以替代该功能.

这显然是委员会接受的.为什么?什么是匿名命名空间不完全取代此功能?

我更喜欢那些有标准委员会讨论的文件或书面记录的答案.

c++ c++11

50
推荐指数
3
解决办法
8686
查看次数

嵌套的匿名命名空间?

使用匿名命名空间时,如果它嵌套在另一个命名空间中会有任何问题吗?例如,在以下代码中Foo1.cpp和Foo2.cpp之间是否存在任何真正的区别:

// Foo.h
namespace Foo
{
    void fooFunc();
}

// Foo1.cpp
namespace Foo
{
    namespace
    {
        void privateFunction()
        {
            ...
        }
    }

    void fooFunc()
    {
        privateFunction();
    }
}

// Foo2.cpp
namespace
{
    void privateFunction()
    {
        ...
    }
}

namespace Foo
{
    void fooFunc()
    {
        privateFunction();
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ namespaces

32
推荐指数
1
解决办法
7595
查看次数

"间接声明另一个命名空间中的命名空间"是什么意思?

[basic.link] C++ 14标准中的第4段:

未命名的命名空间或在未命名的命名空间中直接或间接声明的命名空间具有内部链接.所有其他名称空间都有外部链接.如果名称为...,则具有未在上面给出内部链接的命名空间范围的名称与封闭命名空间具有相同的链接.

"上面间接声明另一个命名空间中的命名空间"是什么意思?

c++ c++14

10
推荐指数
1
解决办法
124
查看次数

标签 统计

c++ ×5

namespaces ×3

c++11 ×2

c++14 ×1

inline-namespaces ×1

iso ×1

standards ×1