提问者:小点点

用2个字符串文本构造向量<int>


对于以下程序:

#include <vector>
#include <iostream>

int main()
{
  std::vector<int> v = {"a", "b"};
  
  for(int i : v)
    std::cout << i << " ";   
}

clang打印97 0'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”的地址计算的。

如果程序格式良好,正确的行为是什么? 这是密码。


共1个答案

匿名用户

我假设它使用的是2参数构造函数,它接受大小和默认值

不,它使用的构造函数有两个输入迭代器。 “A”“B”可以衰减到作为有效迭代器的指针。 作为指向char的指针(迭代器),取消引用的char将被转换为int,并添加为vector的元素。 总之,代码具有UB,因为“A”“B”不引用有效范围。