如果实参与引用参数不匹配,C++将生成临时变量。当前,仅当参数为const引用时,C++才允许这样做。
如果引用参数是const,则编译器将在下面两种情况下生成临时变量:
• 实参的类型正确,但不是左值;
• 实参的类型不正确,但可以转换成正确的类型;
左值是什么呢?
左值参数是可被引用的数据类型,例如,变量、数组元素、结构成员、引用和解除引用的指针。非左值包括字面常量(用引号括起的字符串除外,他们由其地址表示)和包含多项的表达式。
现在,常规变量和const变量都可视为左值,因为可通过地址访问他们。但常规变量属于可修改 的左值,而const变量属于不可修改的左值。