C++11 initializer_list error

C++11 initializer_list error

本文关键字:error list initializer C++11      更新时间:2023-10-16

考虑以下代码:

#include <iostream>
#include <vector>
#include <string>
int main()
{
    std::vector<std::string> v{{"awe", "kjh"}}; // not v{"awe", "kjh"}
    std::cout << v.size() << std::endl;
    return 0;
}
  1. 这个代码是错误的吗?或者在初始化向量时使用双{}是有效的?

  2. 我在gcc和MSVC上尝试了这个代码。MSVC 2012 +编译器2012年11月只是不能编译它,这并不奇怪。使用gcc 4.7或4.8编译的这段代码会在程序执行期间产生运行时错误。这种行为正确吗?

注意,您的初始化相当于:

std::vector<std::string> v{std::string{"awe", "kjh"}}; 
// not: std::vector<std::string> v{std::string{"awe"}, std::string{"kjh"}};

标准不要求std::string类型实现的构造函数,因此基于特定的STD实现,我猜代码可以做不同的事情。

问候,div, rzej

内部{}被视为std::string构造函数。如果您只执行

,它将在运行时失败
std::string> s{"awe", "kjh"};