在容器中存储常量字符串文字

0xb*_*00d 2 c++ string containers string-literals c++17

我有一个结构体和一个结构体foo bar,我想要一些成员字段的常量值,即struct foo { const char* s, ... };std::vector<foo> v;push_backfoos

bar.push_back({ "1", /*...*/ });
bar.push_back({ "2", /*...*/ });
bar.push_back({ "3", /*...*/ });
//...
Run Code Online (Sandbox Code Playgroud)

现在,如果我不是完全错了,这并不安全,因为字符串文字的生命周期受限于初始化大括号的范围。因此,字符串文字的生命周期"1"应该已经在第二行结束push_back

我们该如何处理?我们真的需要创建第二个容器 strongstd::string并将相应的c_str()指针传递给bar吗?

lub*_*bgr 5

只要您只const char *s字符串文字初始化 ,这就是安全的。它们的生命周期与您的程序的生命周期相同。