为什么 std::vector 的字符串文字初始值设定项列表不能在 C++ 中创建 std::vector<std::string>?

Why can't a string literal initializer list for a std::vector create a std::vector<std::string> in C++?

在 C++ 中,如果我这样做:

std::vector words {"some","test","cases","here"};

a string literal,与 "something" 一样,是一个 C 字符串。它创建一个具有静态存储持续时间的 const char[N],其中 N 是字符数加上空终止符。这意味着当你做

std::vector words {"some","test","cases","here"};

您所做的是创建一个 std::vector<const char*> 因为数组可以退化为指针。

如果您想要 std::vector<std::string>,那么您需要的是使用 std::string user defined literal。那看起来像

using namespace std::string_literals;
std::vector words {"some"s,"test"s,"cases"s,"here"s};

现在您实际上已经 std::string 编译器将使用它们来推断向量的类型。