我很惊讶地看到这段代码编译:
std::string s2 = {"Hello", "World"};
执行该语句会导致std::exception
带有消息basic_string::_S_create
,但为什么要编译呢?
这会编译std::string s1 = {"Hello"};
并且似乎生成一个普通字符串,而较长的初始化列表会导致编译错误。
答案 0 :(得分:3)
你可以创建一个字符串形式的两个输入迭代器(当然应该指向相同的内存范围):
const char*
在这种情况下,我猜两个字符串文字都转换为rst = 1'b0;
,这是一个有效的输入迭代器,但由于它们不属于同一范围,因此构造函数迟早会访问无效的内存位置,当它尝试从第一个迭代到第二个时。
然而,我不能用第二个例子重现你的问题 - 这应该是有效的c ++代码。