比较这两种方法:
// 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分配一次。我对么?还有其他要点需要考虑吗?
答案 0 :(得分:1)
第一个版本仅在c++17
之后才有可能。它起作用,因为声明为constexpr
的所有静态成员变量都隐含inline。
允许多个定义(在单独的编译单元中),但链接时只有1.因此,您假设它在每个.cpp
文件中分配一次是不正确的。
哪一个更可取。如果我知道我不会改变它,或者很少会改变它,我会选择第一个选项。
如果我需要更改它,可能会导致.cpp
所有#include
个文件必须重新编译,然后将它分隔在.cpp
文件中会更好