在 C++17 或更新版本中在哪里初始化静态常量成员?

2023-12-25

问题是在 c++17 或更新版本中在哪里初始化静态 const 成员?请考虑以下两种在 C++ 中初始化静态 const 成员的解决方案:

解决方案 1(适用于 c++14 或更早版本):

//foo.h:
#include <iostream>

struct foo{
    static const std::string ToBeInitialized;
};
//foo.cpp
#include <iostream>
#include "foo.h"

const std::string foo::ToBeInitialized{"with a value"};

解决方案 2(适用于 c++17 或更高版本):

//foo.h:
#include <iostream>
struct foo{
    inline static const std::string ToBeInitialized{"with a value"};
};

目前我更喜欢解决方案 2,因为它更短。使用方案 1 或方案 2 的优点和缺点是什么?

我很清楚有几个关于静态常量初始化的问题:

  • 如何在 C++ 中初始化静态 const 成员? https://stackoverflow.com/questions/3531060

  • C++ 在哪里初始化 static const https://stackoverflow.com/questions/2605520

  • static const 成员变量初始化 https://stackoverflow.com/questions/24798761

然而,上述问题都没有明确涉及 c++17 或更高版本。


据我了解,区别在于“非内联”静态变量被编译为单个实例,而“内联”静态变量被编译为每个翻译单元一个实例,然后由链接器消除为单个实例。这意味着“内联”消除只能发生在链接代码内,它不能跨动态链接代码。我相信这个线程中已经提供了很好的解释内联静态常量与静态常量变量 https://stackoverflow.com/questions/54645193/inline-static-const-vs-static-const-variable。祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++17 或更新版本中在哪里初始化静态常量成员? 的相关文章

随机推荐