首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在命名空间中进行静态内联是多余的吗?

问在命名空间中进行静态内联是多余的吗?
EN

Stack Overflow用户
提问于 2022-06-21 05:32:46
回答 1查看 58关注 0票数 0

在命名空间中使变量和函数内联和静态是否有任何意义。例如,考虑以下2个文件:

考虑第一个头文件

代码语言:javascript
复制
// header1.h
#include <string>
#include <iostream>
namespace First
{
    static inline std::string s {"hi"};

    static inline void print(std::string str)
    {
        std::cout << str << std::end;
    }
}

并考虑下面的第二个头文件

代码语言:javascript
复制
// header2.h
#include <string>
#include <iostream>
namespace Second
{
    std::string s {"hi"};

    void print(std::string str)
    {
        std::cout << str << std::end;
    }
}

编译器对两种代码的看法是不同的还是它们引入了相似的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-21 05:41:46

没有命名空间变量和函数有内部链接,比如未命名的命名空间?

不,您认为名称空间(命名名称空间)变量和函数默认具有内部链接的假设是不正确的。

编译器对两种代码的看法是不同的还是它们引入了相似的行为?

带有static关键字的一个具有内部链接,而另一个(在标题2.h中)具有外部链接。

也就是说,头1.h和each 2.h中的变量s是不同的。同样,这些功能也是不同的。

header1.h 1.h

代码语言:javascript
复制
namespace First
{
    static inline std::string s {"hi"};       //s has internal linkage

    static inline void print(std::string str) //print has internal linkage
    {
        std::cout << str << std::end;
    }
}

header2.h

代码语言:javascript
复制
namespace Second
{
    std::string s {"hi"};        //s has external linkage

    void print(std::string str)  //print has external linkage
    {
        std::cout << str << std::end;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72695765

复制
相关文章

相似问题

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