在 C++名称空间 当为标头中声明的非成员子例程添加前缀时,“static”限定符是否有任何作用?

发布于 2024-12-28 17:32:41 字数 141 浏览 1 评论 0原文

考虑一下:

namespace JohnsLib {
    static bool foobar();
    bool bar();
}

static 这里有什么含义?

Consider:

namespace JohnsLib {
    static bool foobar();
    bool bar();
}

What implications does static have here?

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

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

发布评论

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

评论(4

深者入戏 2025-01-04 17:32:41

它将链接从“外部”更改为“静态”,使其对链接器不可见,并且无法从其他编译单元使用。 (好吧,如果其他编译单元也包含标头,它们将获得自己的单独副本)

It changes the linkage from "external" to "static", making it invisible to the linker, and unusable from other compilation units. (Well, if other compilation units also include the header, they get their own separate copy)

囍笑 2025-01-04 17:32:41

命名空间范围内的static 意味着它对于翻译单元(即源文件)而言是本地的。如果您在头文件中定义函数并将该头文件包含到多个 C++ 文件中,则不会出现重新定义错误,因为所有函数都是唯一的(更准确地说,这些函数将具有内部链接)。例如,可以通过匿名名称空间来实现相同的效果

namespace JohnsLib
{
    namespace
    {  
         bool foobar() {definition here, won't cause redefinition errors}
    }
    bool bar();
}

static at namespace scope means that it is local to a translation unit (i.e. source file). If you define the function in the header file and include this header into multiple C++ files, you won't get redefinition errors because all the functions will be unique(more correctly, the functions will have internal linkage). The same effect can be achieved by means of anonymous namespaces, for example

namespace JohnsLib
{
    namespace
    {  
         bool foobar() {definition here, won't cause redefinition errors}
    }
    bool bar();
}
萌能量女王 2025-01-04 17:32:41

命名空间范围(全局或用户定义的命名空间)中的static关键字的结果是这样的定义对象不会有外部链接;也就是说,它不能从其他翻译单元获得,也不能用作(非类型,即引用或指针)模板参数。

The result of static keyword in namespace scope (global or user defined namespace) is that such define object will not have external linkage; that is, it will not be available from other translation units and cannot be used as a (non-type one i.e. reference or pointer) template parameter.

情魔剑神 2025-01-04 17:32:41

在 C++ 编程语言中,Bjarne 指出在 C 和 C++ 程序中,

关键字static(令人困惑地)用于表示“使用内部
链接”。除了函数和类内部之外,不要使用静态

在 Sutter/Alexandrescu C++ 编码标准第 61 项中,“不要在头文件中定义具有链接的实体。”

In the C++ programming Language Bjarne states In C and C++ programs,

the keyword static is (confusingly) used to mean "use internal
linkage". Don't use static except inside functions and classes.

In Sutter/Alexandrescu C++ Coding Standards Item 61 is "Don't define entities with linkage in a header file."

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