从两个元素初始化列表初始化字符串

时间:2016-02-11 10:35:00

标签: c++ string initializer-list

我很惊讶地看到这段代码编译:

std::string s2 = {"Hello", "World"};

执行该语句会导致std::exception带有消息basic_string::_S_create,但为什么要编译呢?

这会编译std::string s1 = {"Hello"};并且似​​乎生成一个普通字符串,而较长的初始化列表会导致编译错误。

1 个答案:

答案 0 :(得分:3)

你可以创建一个字符串形式的两个输入迭代器(当然应该指向相同的内存范围):

const char*

在这种情况下,我猜两个字符串文字都转换为rst = 1'b0;,这是一个有效的输入迭代器,但由于它们不属于同一范围,因此构造函数迟早会访问无效的内存位置,当它尝试从第一个迭代到第二个时。

然而,我不能用第二个例子重现你的问题 - 这应该是有效的c ++代码。