为什么这段代码在没有类型不匹配错误的情况下编译(C ++ 11)?

时间:2018-01-28 01:01:39

标签: c++ c++11 list-initialization

std::vector<char> p = {"abc", "def"};

"abc""def"不是char,为什么编译器没有给出关于此类型不匹配的错误?

1 个答案:

答案 0 :(得分:57)

您没有调用vector的{​​{1}}构造函数。那个构造函数不可行,因为正如你所说,你没有传递initializer_list<char>的列表。

但是char还有一个constructor,它将迭代器带到一系列元素中。

vector

不幸的是,这个构造函数匹配,因为两个参数都会隐式转换为template< class InputIt > vector( InputIt first, InputIt last, const Allocator& alloc = Allocator() ); 。但是您的代码具有未定义的行为,因为传递给构造函数的开始和结束迭代器不是有效范围。