首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我认为第7.3.1.2/1节中的例子是不正确的

我认为第7.3.1.2/1节中的例子是不正确的
EN

Stack Overflow用户
提问于 2014-09-02 13:18:04
回答 3查看 119关注 0票数 1

第7.3.1.2/1号

名称空间的成员(包括模板的显式专门化(14.7.3))可以在该命名空间中定义。[例子: 命名空间X{ void (){/./}

为了在命名空间中定义函数,您必须使用其中一个说明符:staticinline。我说的对吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-02 13:36:43

不是的。您可以在带有非内联外部链接的命名空间中定义它,只要程序中只有一个定义(以满足“一个定义规则”的要求)。

通常,这意味着您可以像在源文件中那样定义它(因此它只能在单个翻译单元中定义一次),但是如果在一个标题中定义它(可能是inline,或者可能是static,或者在不寻常的情况下,在一个未命名的命名空间中),则必须声明它为多个翻译单元所包含。但这与定义是否在其命名空间内无关。

票数 4
EN

Stack Overflow用户

发布于 2014-09-02 13:23:37

可以想象,您有一个具有声明的头文件:

代码语言:javascript
运行
复制
namespace X {
    void f();
}

以及包含以下内容的翻译单元,包括此标头:

代码语言:javascript
运行
复制
namespace X {
    void f() { / ... / }
}

作为以下备选办法:

代码语言:javascript
运行
复制
void X::f() { / ... / }

或者一个翻译单元,它不包含与X::f相关的内容,既声明并定义函数:

代码语言:javascript
运行
复制
namespace X {
    void f() { / ... / }
}
票数 3
EN

Stack Overflow用户

发布于 2014-09-02 13:29:16

即使没有标头,也可以有一个包含以下内容的.cpp文件:

代码语言:javascript
运行
复制
namespace X {
    void f() { / ... / }
}

或者,如果它只包含在一个翻译单元中,则可以将其放在标题中。

此外,即使头包含在多个翻译单元中,也可以如下所示:

代码语言:javascript
运行
复制
namespace {
    namespace X {
        void f() { / ... / }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25624381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档