如何在 .cpp 文件中声明 const char*

How to declare const char* in .cpp file

关于在.h 文件中声明const 字符串的问题很多,这不是我的情况。

我需要在

中使用字符串(如果它很重要,则用于序列化目的)

我目前的解决方案是

// file.cpp
static constexpr const char* const str = "some string key";

void MyClass::serialize()
{
    // using str
}

void MyClass::deserialize()
{
    // using str
}

有什么问题吗? (即内存泄漏、重新定义、UB、副作用)?

P.S。在这里使用 #define KEY "key" 可能会更好 (speed/memory/consistency)?

既然你提到了 C++17,最好的方法是:

constexpr std::string_view str = "some string key";

str会被编译器替换到编译时用到的地方。

  1. Memory-wise 您摆脱了将 str 存储在 run-time 中,因为它仅在编译时可用。

  2. Speed-wise 这也稍微好一点,因为在运行时获取数据的间接访问更少。

  3. Consistency-wise 它甚至更好,因为 constexpr 仅用于不可变且在编译时可用的表达式。此外 string_view 仅用于不可变字符串,因此您使用的是您所需的确切数据类型。

constexpr 意味着后者 const,后者又意味着 static(对于 namespace-scope 变量)。除了冗余之外,这很好。