【发布时间】:2017-06-28 12:09:18
【问题描述】:
给出以下代码:
#include <iterator>
#include <vector>
int main()
{
char arr[3] = { 1,2,3 };
std::vector<char> vec = { 1,2,3 };
std::vector<int> vec_one(std::begin(arr), std::end(arr));
std::vector<int> vec_two(vec.begin(), vec.end());
}
vec_one 和 vec_two 的初始化是未定义的,实现是根据普通类型转换规则定义还是定义?
如果交换了char 和int 类型怎么办?
【问题讨论】:
-
我不明白这个问题的否决票。它清楚地解释了问题,提供了minimal reproducible example,并且与大多数带有c++ 标签的问题相比,它非常通用和抽象。
-
@IInspectable:我完全同意。目前的答案(包括我的)可能会更全面。
-
我没有对这个投票,因为虽然我喜欢清晰,但没有研究成果的证明。但我确实觉得投反对票是不公平的。
-
@rex:再一次,到达从迭代器构造容器的地步,实现minimal reproducible example(是最小的和完整的),并使用术语“未定义”、“实现定义”和“(良好)定义”需要(并证明)更多研究努力,而不是这里的其他问题。
-
我想我们可以达到这样的地步,即通过引用 C++ 标准可以回答的每个问题都可以因为没有显示研究工作而被关闭。
标签: c++ vector iterator language-lawyer