【发布时间】:2013-08-01 12:54:39
【问题描述】:
可以构造一个带有迭代器范围的向量,如下所示:
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>{}};
这里到底发生了什么?
我知道采用初始化列表的构造函数优先于其他形式的构造。编译器不应该解析为构造函数采用包含std::istream_iterator 的两个元素的初始化列表吗?这应该是一个错误,因为 std::istream_iterator 无法转换为向量值类型 std::string,对吧?
【问题讨论】:
-
这是来自stackoverflow.com/questions/17978410/… 吗? :D
-
@P0W 是的! :) 我已经多次使用这种语法,但它让我想知道你何时将其描述为使用 C++11 初始化列表而不是简单的统一初始化括号。
标签: c++ c++11 iterator uniform-initialization