我想重新安排一对参考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);
我想知道这是否合法并且不会导致任何未定义的行为。它适用于我的编译器,但我不确定它是否可移植。
我相当肯定这是未定义的行为,因为在这样的非平凡类上构造是非法的(std::pair 可以是非平凡的 AFAIK)。
无论如何,看看std::reference_wrapper
哪个是可重新安装的。
refPair = pair<std::reference_wrapper<int>, std::reference_wrapper<int> >(std::ref(c), std::ref(d));
你写,
“想要重新安置一对参考文献 refPair”
不,不能重新安装引用。
从技术上讲,您可以改用指针。
但是您的原始代码所做的没有意义。您修改后的“工作”代码所做的事情毫无意义,而且形式上也不好。因此,这很可能是一个 XY 问题,即您要问的是想象的解决方案 Y 的缺点,而不是真正的问题 X——这是什么?