大家来讨论c++的"函数返回临时对象"
想来想去,总觉得c++的临时对象设计得很不合理.
望高手指教.
问题1.
为什么要设计"临时对象",而不让"函数直接返回对象呢"????
后者的"效率"应该更加高一些吧?
例如:
class A { -----}
A get () { A a;
return a;
}
此时返回的是a的拷贝---临时对象,为什么不直接返回对象a本身呢?
如果担心"函数调用者"直接改变a, 加一个const不就行了吗?
如果考虑的是a的作用域的问题,那么我想说:-----"临时对象"的作用域
也很"短暂"啊?
问题2.
函数返回的"临时对象"为什么设计为"const"呢?
既然是临时对象,很快就会析构的,难道"担心"它被别人改变???????
相反,如果不设计为const,应该更加"爽"一些吧?
void f ( A & a) {---------------}
void main () { f(get()); }
它不能通过编译的"罪魁祸首"就是因为get()返回的临时对象是const!!!
问题3
不知这是vs.net2003 的问题,还是其他的问题??
A & a1= get();// 我原本猜测它应该不能通过编译的(因为a1不是const),
但是令我吃惊的是它竟然可以通过编译,并且结果
调用了--------两次构造函数,一次析构函数!!!!!!
const A & a2=get()
//C++标准:如果一个临时对象被赋值给一个引用,
这个临时对象在这个引用的生命周期中将不能被销毁。
换句话说,不同于返回一个局部变量的引用,将一个
引用绑定到一个临时对象上是完全合法的,任何时候
使用这个引用,这个对象都应该是有效的.
------令我吃惊的是---------:
还是调用--------两次构造函数,一次析构函数!!!!!!
欢迎指教!!