为什么此代码编译 (C++11) 而没有类型不匹配错误

Why does this code compile (C++11) without a type mismatch error?

本文关键字:类型 不匹配 错误 代码 编译 C++11 为什么      更新时间:2023-10-16
std::vector<char> p = {"abc", "def"};

"abc""def"不是char,为什么编译器不给我关于这种类型不匹配的错误?

你不是在调用vector的构造函数,它需要一个initializer_list<char>。该构造函数不可行,因为正如您所说,您没有传递char列表。

但是vector也有一个构造函数,它将迭代器带到一系列元素。

template< class InputIt >
vector( InputIt first, InputIt last,
        const Allocator& alloc = Allocator() );

不幸的是,此构造函数匹配,因为两个参数将分别隐式转换为 char const * 。但是您的代码具有未定义的行为,因为传递给构造函数的开始和结束迭代器不是有效范围。