构造<int>具有 2 个字符串文字的向量



对于以下程序:

#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 00和"b"没有引用有效范围,"b"无法从"a"访问。

相关内容