对于以下程序:
#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()
我认为它在使用接受大小和默认值的两个参数的构造函数,其中大小是从字符串常量 "a"
的地址计算出来的。
如果程序形式正确,那么正确的行为是什么?这是代码。
"a"
和"b"
会隐式转换为const char *
类型,编译器认为它们是一个char
类型的范围,可以转换成int
类型。 - François Andrieux