可以构造一个带有迭代器范围的向量,如下所示:
std::vector<std::string> vec(std::istream_iterator<std::string>{std::cin},
std::istream_iterator<std::string>{});
但我也可以使用 C++11 统一初始化语法(注意括号)编译和运行代码,如下所示:
std::vector<std::string> vec{std::istream_iterator<std::string>{std::cin},
std::istream_iterator<std::string>{}};
这里到底发生了什么?
我知道采用初始化列表的构造函数优先于其他形式的构造。编译器不应该解析为构造函数采用包含 2 个元素的初始化列表std::istream_iterator
吗?这应该是一个错误,因为std::istream_iterator
不能转换为向量值类型std::string
,对吧?