Poi*_*ind 6 c++ gcc initialization vector clang
int main()
{
std::vector<char> delimiters = { ",", ";" };
std::cout << delimiters[0];
}
Run Code Online (Sandbox Code Playgroud)
我在gcc和clang之间得到了不同的答案
clang7.0.0打印出来,
gcc8.2.0给出了错误
在抛出'std :: length_error'的实例后调用终止what():无法创建大于max_size()的std :: vector
中止
哪个编译器是对的?
Nat*_*ica 14
两个编译器都是正确的,因为您的代码具有未定义的行为.
你陷入了困境. { ",", ";" }被翻译为std::vector{const char*, const char*}.由于你有指针,这在语法上是有效的(因为它调用vector的迭代器构造函数),但是你使用的是两个无关的字符串文字的地址,这是无效的,因为迭代器必须指向同一个容器.
你真正需要的是使用字符文字,而不是初始化列表中的字符串文字
std::vector<char> delimiters = { ',', ';' };
Run Code Online (Sandbox Code Playgroud)