constexpr班级成员的利弊

时间:2018-06-06 17:19:41

标签: c++ constexpr

比较这两种方法:

// MyClass.hpp
class MyClass
{
  static constexpr char* const FOO = "bar";
};

vs

// MyClass.hpp
class MyClass
{
  static const char* const FOO;
};

// MyClass.cpp
const char* const MyClass::FOO = "bar";

哪一个更好?我想象在第二种情况下," bar"字符串只被分配一次,而在第一种情况下,每个包含我的标题的.cpp分配一次。我对么?还有其他要点需要考虑吗?

1 个答案:

答案 0 :(得分:1)

第一个版本仅在c++17之后才有可能。它起作用,因为声明为constexpr的所有静态成员变量都隐含inline

允许多个定义(在单独的编译单元中),但链接时只有1.因此,您假设它在每个.cpp文件中分配一次是不正确的。

哪一个更可取。如果我知道我不会改变它,或者很少会改变它,我会选择第一个选项。

如果我需要更改它,可能会导致.cpp所有#include个文件必须重新编译,然后将它分隔在.cpp文件中会更好