根据 Google C++ 风格指南初始化静态字符串(C 类型或 std::string)
Initialize static string (either C-type or std::string) with respect to Google C++ Style Guide
根据 Google C++ Style Guide,第 "Static and Global Variables" 节声称: "As a result we only allow static variables to contain POD data. This rule completely disallows std::vector
(use C arrays instead), or string
(use const char []
)." 假设我的程序需要一些静态字符串,这些字符串存储在配置文件中并将在运行时加载。那么如何将字符串加载到 const char[]
?
您必须在编译时指定字符串的长度。在执行之前,您需要知道字符串的最大长度。
给定长度:
const std::size_t len = 2048; // can store 2047 characters with null-terminating '[=10=]'
你可以在 c 风格中做到这一点
char buffer[len];
或者更好的是,使用 std::array
#include <array>
std::array<char,len> buffer;
然后将文件打开到 ifstream 中,并适当地解析数据。
您在配置文件中存储了一个字符串这一事实对您如何加载它没有任何影响。您可以将数据加载到 const char[]
或 std::string
或其他任何内容,具体取决于您在特定情况下方便的方式。
规则就是不允许非 POD global/static 变量...就是这样。
忽略 Google 的 C++ 风格指南的优点,您可能会将其存储在一个 const char*
变量中,该变量通过动态分配获取其指针:
static const char *my_static_string = nullptr;
...
void load_static_string()
{
if(!my_static_string)
{
std::string str = //Read string from file.
my_static_string = new char[str.size() + 1];
strncpy(my_static_string, str.data(), str.size() + 1);
}
}
根据 Google C++ Style Guide,第 "Static and Global Variables" 节声称: "As a result we only allow static variables to contain POD data. This rule completely disallows std::vector
(use C arrays instead), or string
(use const char []
)." 假设我的程序需要一些静态字符串,这些字符串存储在配置文件中并将在运行时加载。那么如何将字符串加载到 const char[]
?
您必须在编译时指定字符串的长度。在执行之前,您需要知道字符串的最大长度。
给定长度:
const std::size_t len = 2048; // can store 2047 characters with null-terminating '[=10=]'
你可以在 c 风格中做到这一点
char buffer[len];
或者更好的是,使用 std::array
#include <array>
std::array<char,len> buffer;
然后将文件打开到 ifstream 中,并适当地解析数据。
您在配置文件中存储了一个字符串这一事实对您如何加载它没有任何影响。您可以将数据加载到 const char[]
或 std::string
或其他任何内容,具体取决于您在特定情况下方便的方式。
规则就是不允许非 POD global/static 变量...就是这样。
忽略 Google 的 C++ 风格指南的优点,您可能会将其存储在一个 const char*
变量中,该变量通过动态分配获取其指针:
static const char *my_static_string = nullptr;
...
void load_static_string()
{
if(!my_static_string)
{
std::string str = //Read string from file.
my_static_string = new char[str.size() + 1];
strncpy(my_static_string, str.data(), str.size() + 1);
}
}