问题是在 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++17 或更高版本。
最佳答案
据我了解,区别在于“非内联”静态变量被编译为单个实例,而“内联”静态变量被编译为每个翻译单元一个实例,然后由链接器消除为单个实例。这意味着“内联”消除只能发生在链接代码内,它不能跨动态链接代码。我相信这个线程Inline static const vs static const variable中已经提供了很好的解释。祝你好运!
关于c++ - 在 C++17 或更新版本中在哪里初始化静态常量成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65084349/