关于const引用做为形参的疑惑。
当函数形参是一个const引用的时候,是否产生临时对象?
double a = 1.34 ;
const int &b = a ;
const int &c = 1024 ;
在上面的const引用中都产生了临时变量,然后引用变量指向该临时变量。
在函数传递中,比如:
class X {};
X f() { return X(); }
void g1(X&) {}
void g2(const X&) {}
int main() {
g1(f()) ;
g2(f());
return 0;
}
因为在f()函数返回的是一个临时变量,因此f()函数结束的时候这个临时变量的生命期也应该
结束了。因此g1的调用是非法的,至于g2则因为是const引用,所以产生了另一个临时变量。
g2的调用是可以的。
那么我现在的疑问是,如果传给g2的是一个正常的对象,会产生临时变量吗?难道只有在传递的
对象是常量,或者临时变量的时候const引用才自动的产生另一个临时变量?
如果不管传递的是什么对象,const引用都会产生临时变量,那么和值传递应该没有什么区别了,
都应该需要一个临时对象的构造拷贝析构过程,也就没有了快速的优点。
事实到底是怎么样子的?