读书人

临时变量的有关问题!

发布时间: 2012-02-22 19:36:54 作者: rapoo

临时变量的问题!!
more effective c++中有段话说:“函数调用一个临时对象传递给一个non-const-reference参数是不允许的!!”。
那么如下两个程序
f(int &a){}
int b;
f(b);
这个是可以的但是如果把int b变成char b的话
f(int &a){}
char b;
f(b);
就会出错!!这时的f参数必须是const-reference的才对,那么我理解:临时变量是不是不同与局部变量,临时变量只在发生隐式转换的时候才产生呢!!等待高手门为我解答!!!

[解决办法]
临时对象当然不同于局部对象了!

临时对象是编译器在背后隐含的操作,而局部对象是你在某个scope内声明的变量,当离开了这个scope,这个局部对象就不存在了,但是在

这个scope之内,是可以随便使用的!

临时对象不光发生在隐式转换的时候才产生,例如,有时候return的时候,也会产生临时对象
[解决办法]
在程序设计语言的概念中,一般“临时”的东西都是匿名的。
但匿名的东西不一定都是临时的。比如匿名结构体。
[解决办法]
你把b变为char了,再传给函数f肯定会产生临时变量
但临时变量不仅仅局限在隐式转换的时候
class A;
vector<A> v(9); 这里就会产生临时变量

读书人网 >C++

热点推荐