重新拔插这样的一对引用是否合法
Is reseating a pair of references like this legal?
我想重新放置一对引用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::p air可以是非平凡的AFAIK)。
无论如何,看看std::reference_wrapper
哪些是可以恢复的。
refPair = pair<std::reference_wrapper<int>, std::reference_wrapper<int> >(std::ref(c), std::ref(d));
你写道,
"想要重新拔插一对引用 refPair"
不可以,不能重新拔插引用。
从技术上讲,您可以改用指针。
但是你的原始代码所做的是没有意义的。而你修改后的"工作"代码所做的是毫无意义的,而且在形式上是不好的。因此,这很可能是一个XY问题,即你问的是想象的解决方案Y的缺点,而不是真正的问题X——这是什么?
相关文章:
- 存储对(可能)临时对象的引用是否合法,只要引用不比对象存活?
- 对静态分配的子类对象进行静态分配的纯虚拟父类引用是否合法?
- 形成对对象的引用是否构成访问?
- C++ 引用是否在需要时隐式转换为值?
- 右值引用是否具有与右值引用相同的开销?
- 返回引用是否也会延长其生存期?
- 返回对局部变量的引用是否正常工作?
- 右值引用是否像右值引用一样工作
- 强制转换为指针引用是否会导致未定义的行为
- C++ 指向类的指针和/或引用是否被认为是"movable"?
- 结构化绑定和转发引用是否混合良好?
- 此常量引用是否保留了其生命?
- 返回对私有向量成员元素的非常量引用是否是一种不好的做法
- 从 r 值引用限定方法返回 r 值引用是否是一种好的做法?
- 在 C++ 中更改越界指针的取消引用是否安全?
- 本地引用是否由"DetachCurrentThread"清除?
- 从函数返回引用是否会导致在使用'auto'时创建新的临时对象?
- 常量右值引用是否允许对编译器进行额外优化?
- 如果参数传递两次,会发生什么情况?一次按值,一次按引用?是否会修改
- 返回强制引用是否安全