4

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

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

4

2 回答 2

4

我相当肯定这是未定义的行为,因为在这样的非平凡类上构造是非法的(std::pair 可以是非平凡的 AFAIK)。

无论如何,看看std::reference_wrapper哪个是可重新安装的。

refPair = pair<std::reference_wrapper<int>, std::reference_wrapper<int> >(std::ref(c), std::ref(d));
于 2013-01-27T16:28:52.517 回答
0

你写,

“想要重新安置一对参考文献 refPair”

不,不能重新安装引用。

从技术上讲,您可以改用指针。

但是您的原始代码所做的没有意义。您修改后的“工作”代码所做的事情毫无意义,而且形式上也不好。因此,这很可能是一个 XY 问题,即您要问的是想象的解决方案 Y 的缺点,而不是真正的问题 X——这是什么?

于 2013-01-27T16:39:16.363 回答