临时对象(由编译器定义的一个没有命名的非堆(non-heap)对象),不出现在C++代码中,但是确实存在。这种未命名对象有两种产生条件:
- 为了使函数调用成功而进行的隐式类型转换。
- 函数返回对象。
C++ 中对临时变量的引用必须是 const引用。
如果一个参数是以一个非const 引用 传入的,那么C++编译器就有理由相信我们传入的参数在函数中是可以被修改的,并且这个修改的变量在函数外也是可以使用的;如果我们把一个临时对象当作非const引用参数传进来,则由于对临时变量的修改在函数内部,临时变量在使用完成后就被释放,所以我们修改一个临时变量实际上是没有意义的,因此,C++编译器就加入了临时变量不能作为非const引用的这个语义限制。
在编译器告诉你错误比在运行期时遇到问题更为友好。