探讨“临时对象”(temporary object)
MSDN 中对 VS2012 版本的临时对象的说明如下: 在某些情况下,编译器有必要产生临时对象。 当初始化一个 常量引用 ( const reference )时,如果给定的初始化对象类型与目标引用类型不同(但是两者 能够相互转换),需要产生临时对象; 当函数的返回值是用户自定义类型,且程序中未将此返回值拷贝到其他对象中时,需要产生临时对象; 当给定的对象显式向自定义对象类型转换时,产生临时对象; IBM 官网上的给出的描述如下: C++ 中编译器有些时候有必要产生临时对象。通常在初始化引用、计算(评估 evaluation )含有标砖类型转换的表达式、参数传递、函数返回、评估异常抛出表达式( throw expression )。 参考资料: http://msdn.microsoft.com/en-us/library/a8kfxa78(v=vs.110).aspx http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.doc%2Flanguage%2Fref%2Fclrc03cplr116.htm 总之,读完之后,是不是还感觉临时对象捉摸不定呢?的确, C++ 标准中没有明确给出临时对象的产生规则和条件, 由编译器自动产生的