为何这个临时变量是常量?
在C++编程思想里,有这么一段,不太理解,请指教:
由于引用的语法(看起来像值传递)的原因,传递一个临时对象给带有一个引用的函数,
是可能的,但不能传递一个临时对象给带有一个指针的函数—因为它必须清楚地带有地址。
所以,通过引用传递会产生一个在C中不会出现的新情形:一个总是常量的临时变量,它的地
址可以被传递给一个函数。这就是为什么临时变量通过引用被传递给一个函数时,这个函数的
参数一定是常量(c o n s t)引用。下面的例子说明了这一点:
class{};
X f(){return X();}//return by value
void g1(X&) {}//Pass by non-const reference
void g2(const X&){}//Pass by const reference
main(){
//Error:const temporary created by f();
//! g2(f());
//OK:g2 takes a const reference;
g2(f());
}
函数f()返回类X的一个对象的值。这意味着立即取f()的返回值并把它传递给其他函数时
(正如g1()和g2()函数的调用),建立了一个临时变量,那个临时变量是常量。这样,函数g1()中
的调用是错误的,因为g1()不带一个常量(const)引用,但是函数g2()中的调用是正确的。