【发布时间】:2019-07-20 08:28:33
【问题描述】:
是否有理由不在头文件中使用“constexpr const char*”?
一位同事的论点是,包括这个头文件的每个翻译单元都会有一个副本。
我的理解是,由于它的编译时常量,没有分配内存,并且在内存使用方面更像是“#define”宏。 这是来源,
TestConstExpr.h
#include <string.h>
namespace TestConstExpr
{
constexpr const char* TIME_FORMAT = "yyyy-MM-dd hh:mm:ss";
constexpr const int TIME_FORMAT_SIZE = strlen(TIME_FORMAT) + 1;
class TestClass
{
char arr[TIME_FORMAT_SIZE];
}
}
【问题讨论】:
-
char const *?当然不是,对常量数组或 getter 函数的引用 - 要走的路。另外你的理解也不对。内存的分配方式与在源文件中的分配方式完全相同。 -
我建议你用 bloaty mcbloatface 试试 - 将这些头文件编译成多个 TU,然后用 -O2 将它们链接在一起,看看字符串是否重复!