重新安装像这样合法的一对参考?

时间:2013-01-27 16:20:31

标签: c++ reference

我想重新安排一对参考资料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);

我想知道这是否合法,并且不会导致任何未定义的行为。它适用于我的编译器,但我不确定它是否可移植。

2 个答案:

答案 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 - 这是什么?