为什么此代码编译 (C++11) 时没有出现类型不匹配错误?
Why does this code compile (C++11) without a type mismatch error?
std::vector<char> p = {"abc", "def"};
"abc"
和 "def"
不是 char
,为什么编译器不给我这个类型不匹配的错误?
您没有调用 vector
的构造函数,该构造函数采用 initializer_list<char>
。该构造函数不可行,因为正如您所说,您没有传递 char
s.
的列表
但是 vector
也有一个 constructor 将迭代器带到一系列元素。
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
不幸的是,这个构造函数匹配,因为两个参数都将隐式转换为 char const *
。但是您的代码具有未定义的行为,因为传递给构造函数的开始和结束迭代器不是有效范围。
std::vector<char> p = {"abc", "def"};
"abc"
和 "def"
不是 char
,为什么编译器不给我这个类型不匹配的错误?
您没有调用 vector
的构造函数,该构造函数采用 initializer_list<char>
。该构造函数不可行,因为正如您所说,您没有传递 char
s.
但是 vector
也有一个 constructor 将迭代器带到一系列元素。
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
不幸的是,这个构造函数匹配,因为两个参数都将隐式转换为 char const *
。但是您的代码具有未定义的行为,因为传递给构造函数的开始和结束迭代器不是有效范围。