Where to initialize static const member in c++17 or newer?

試著忘記壹切 提交于 2021-01-29 05:58:11

问题


The questions is where to initialize static const member in c++17 or newer? Please consider the following two solutions for initializing a static const member in c++:

Solution 1 (for c++14 or older):

//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"};

Solution 2 (for c++17 or newer):

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

Currently I prefer solution 2 because it is shorter. What are the advantages and disadvanteges of using solution 1 or solution 2?

I am well aware of the fact that there are several questions dealing about static const initialization:

  • How to initialize a static const member in C++?

  • C++ where to initialize static const

  • static const member variable initialization

However non of the above questions deal with c++17 or newer explicitly.


回答1:


As I understand it the difference is that the "non-inline" static variable gets compiled to a single instance while the "inline" one gets compiled to one per translation unit and then eliminated to a single one by the linker. This means the "inline" elimination can occur only within the linked code, it can NOT cross dynamically linked code. I believe a good explanation has been provided in this thread Inline static const vs static const variable . Good luck!



来源:https://stackoverflow.com/questions/65084349/where-to-initialize-static-const-member-in-c17-or-newer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!