为什么此代码编译 (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
列表。
但是vector
也有一个构造函数,它将迭代器带到一系列元素。
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
不幸的是,此构造函数匹配,因为两个参数将分别隐式转换为 char const *
。但是您的代码具有未定义的行为,因为传递给构造函数的开始和结束迭代器不是有效范围。
相关文章:
- 将 unordered_map 与 Catch2 谓词一起使用时类型不匹配
- 重载函数的地址与所需类型不匹配
- 参数错误可能与类型不匹配有关?
- 调用子例程时类型不匹配
- POSIX(C )参数类型不匹配
- typedef 类型不匹配,将其传递到函数中
- 为什么此代码编译 (C++11) 而没有类型不匹配错误
- 候选模板被忽略:推断的类型与调整后的类型不匹配
- 内联 ASM:'out'的操作数类型不匹配
- 为什么我们有一个类型不匹配
- C++类和freeglut(参数类型不匹配)
- 警告 639:二进制操作中类型 'uint64' 的强类型不匹配
- 警告 634:相等或有条件的强类型不匹配(类型"bool")
- 不了解C++类型不匹配:const Foo* to Foo* const&
- 函数声明和定义的返回类型不匹配,编译器可以吗?
- 类型不匹配
- 返回指向常量getter的指针时,返回值类型与函数类型不匹配
- llvm pass replaceAllUses与类型不匹配?
- 参数类型不匹配(无效*)
- 重载运算符中的类型不匹配(写入管道)