我想重新安排一对参考资料refPair
int a, b, c, d;
pair<int&, int&> refPair(a, b);
这样做似乎会导致c和d的值被复制到a和b,这是我不想要的
refPair = pair<int&, int&>(c, d);
然而这样做
new(&refPair) pair<int&, int&>(c, d);
我想知道这是否合法,并且不会导致任何未定义的行为。它适用于我的编译器,但我不确定它是否可移植。
答案 0 :(得分:4)
我很确定这是未定义的行为,因为构造像这样的非平凡类是非法的(std :: pair可能是非平凡的AFAIK)。
无论如何,请查看可重新安装的std::reference_wrapper
。
refPair = pair<std::reference_wrapper<int>, std::reference_wrapper<int> >(std::ref(c), std::ref(d));
答案 1 :(得分:0)
你写,
“想重新安排一对参考refPair”
不,不能重新引用引用。
从技术上讲,你可以使用指针。
但是你的原始代码所做的事情毫无意义。你修改后的“工作”代码所做的事情是毫无意义的,也是正式的。因此,这可能是一个XY问题,即你在询问想象解Y的缺点而不是真正的问题X - 这是什么?