如何在 .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
会被编译器替换到编译时用到的地方。
Memory-wise 您摆脱了将 str 存储在 run-time 中,因为它仅在编译时可用。
Speed-wise 这也稍微好一点,因为在运行时获取数据的间接访问更少。
Consistency-wise 它甚至更好,因为 constexpr
仅用于不可变且在编译时可用的表达式。此外 string_view
仅用于不可变字符串,因此您使用的是您所需的确切数据类型。
constexpr
意味着后者 const
,后者又意味着 static
(对于 namespace-scope 变量)。除了冗余之外,这很好。
关于在.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
会被编译器替换到编译时用到的地方。
Memory-wise 您摆脱了将 str 存储在 run-time 中,因为它仅在编译时可用。
Speed-wise 这也稍微好一点,因为在运行时获取数据的间接访问更少。
Consistency-wise 它甚至更好,因为
constexpr
仅用于不可变且在编译时可用的表达式。此外string_view
仅用于不可变字符串,因此您使用的是您所需的确切数据类型。
constexpr
意味着后者 const
,后者又意味着 static
(对于 namespace-scope 变量)。除了冗余之外,这很好。