这种代码中gcc和clang之间的不同行为

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)