初始化C字符串向量

时间:2019-01-23 21:21:15

标签: c++ vector c-strings initializer-list string-literals

以下代码是否合法C ++?又为什么呢?它可能有什么风险?

std::vector<const char *> v1 = {"a", "b", "c"};

我正在考虑这是如何工作的,关于字符串文字的生存期。据我了解:

  1. 编译器制作一个临时的c字符串数组。
  2. 它将临时数组分配给std::initializer_list<const char*>
  3. 调用构造函数vector( std::initializer_list<const char *> init)
  4. 从临时向量复制构造v1

好吧,我担心的是,这些字符串文字的生存期是否应该在第3步之后就过期了?为什么?

临时矢量是否存在无关紧要。我的观点是,构造函数的实现方式如下:

template <typename T>
vector<T>::vector(initializer_list<T> init)
{
  // shallow copy from init to this
}

init的生存期在构造函数返回后结束时,这些字符串文字是否会过期?

1 个答案:

答案 0 :(得分:1)

好吧,一旦知道答案,我就知道这是一个愚蠢的问题。 来自cppreference.com

  

字符串文字具有静态的存储期限,因此在程序生命周期内存在内存中。

这说明了一切。