int main()
{
std::vector<char> delimiters = { ",", ";" };
std::cout << delimiters[0];
}
我在gcc和clang之间得到了不同的答案
clang7.0.0打印出来,
gcc8.2.0给出了错误
抛出'std :: length_error'实例后调用terminate what():无法创建大于max_size()的std :: vector
中止
哪个编译器正确?
答案 0 :(得分:14)
两个编译器都是正确的,因为您的代码具有未定义的行为。
您陷入了陷阱。 { ",", ";" }
被翻译为std::vector{const char*, const char*}
。由于您有指针,因此它在语法上是有效的(因为它称为向量的迭代器构造函数),但是您使用的是两个无关的字符串文字的地址,该地址无效,因为迭代器必须指向同一容器。
要真正使用此功能,您真正需要的是使用字符文字,而不是像初始化程序列表中的字符串文字一样
std::vector<char> delimiters = { ',', ';' };