对于以下程序:
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v = {"a", "b"};
for(int i : v)
std::cout << i << " ";
}
clang打印CCD_ 1。'a'
的ascii值是97,但我不完全理解输出。
另一方面,gcc抛出一个异常:
terminate called after throwing an instance of 'std::length_error'
what(): cannot create std::vector larger than max_size()
所以我假设它使用的是2参数构造函数,它采用大小和默认值,其中大小是根据字符串文本"a"
的地址计算的。
如果程序格式良好,正确的行为是什么?这是代码。
我假设它使用的是采用大小和默认值的2参数构造函数
不,它使用了接受两个输入迭代器的构造函数。CCD_ 4和CCD_。作为指向const char
的指针(迭代器(,取消引用的const char
将被转换为int
,并添加为vector
的元素。无论如何,该代码具有UB,因为97 0
0和"b"
没有引用有效范围,"b"
无法从"a"
访问。