【发布时间】:2016-05-10 15:12:51
【问题描述】:
以下代码时:
std::vector<std::tuple<int&>> v;
int a = 5; v.emplace_back(a);
int b = 4; v.emplace_back(b);
int c = 3; v.emplace_back(c);
int d = 2; v.emplace_back(d);
int e = 1; v.emplace_back(e);
std::sort(std::begin(v), std::end(v));
使用 gcc/libstdc++ 编译 vs clang/libc++ 二进制给出不同的结果。
对于gcc/libstdc++,一个元素被复制到所有其他引用。
5 4 3 2 1
5 5 5 5 5
首先我认为clang/libc++ 的行为符合预期,但它最多只能在一个向量中使用 5 个元素(因为小容器有一种特殊情况)。
5 4 3 2 1
1 2 3 4 5
当传递更多元素时,结果类似于 gcc。
5 4 3 2 1 0
3 4 5 5 5 5
那么将std::sort 用于具有引用的元组容器(即使用std::tie,结构的排序子集)是否有效?
如果没有,我应该期待任何警告吗?
【问题讨论】: