我想把一个引用传递给一个函数。这段代码没有按照我的期望工作:
struct A {
};
void foo(A& a) {
// do something with a
}
int main(int, char**) {
foo(A());
}
我遇到了编译错误
非const引用类型
A&
的初始化无效,源类型为A
。
但是当我将方法 A& ref()
加入到A
中,并在把它传递给函数之前调用该方法时,似乎可以使用a
。在调试时,foo()
被调用后,A
对象会被销毁:
struct A {
A& ref() {
return *this;
}
};
void foo(A& a) {
// do something with a
}
int main(int, char**) {
foo(A().ref());
}
这段代码符合标准吗?调用ref()
会自动延长对象的生命周期,直到foo()
返回吗?
const A&
或A &&
会更加简单。 - Sam Varshavchik