【发布时间】:2015-11-04 06:06:46
【问题描述】:
以下代码在 C++ 中是否合法?
template<typename T>
class Foo {
public:
Foo(T& v) : v_(v) {}
private:
T& v_;
};
int a = 10;
Foo<int> f(a);
void Bar(int& a) {
new (&f)Foo<int>(a);
}
引用不应该被绑定两次,对吧?
【问题讨论】:
-
你没有绑定引用
v_两次,你用@中Foo<int>(a)初始化的对象中的数据覆盖它987654324@. -
"引用不应该被绑定两次,对吧?" – 不,但这与您的其余问题有什么关系?
-
@JoachimPileborg 谢谢,现在我回头看,最后一句话没有意义。引用不能被绑定两次,我们不能做任何事情来重新绑定引用。
-
当前的代码是合法的,只要之后你不访问原始对象(例如通过
f)。
标签: c++ reference object-lifetime placement-new reference-binding