- 左值概念:左值参数是可被引用的数据对象,例如:变量、数组元素、结构成员、引用和接触引用的指针
- 非左值概念:包括字面常量(用引号括起的字符串除外,它们由其地址表示)和包含多项的表达式
#include参考书籍using namespace std; //! 当函数形参为非const引用时,接受引用参数的参数的意图是修改作为参数传递进来的变量,如果创建临时变量, //! 则会阻止这种意图的实现,故C++编译器禁止创建临时变量 void Swap(int &a) {} //! 当函数形参为const引用时,后面两种情况会创建临时变量:1. 实参的类型正确,但不是左值;2.实参的类型不正确,但可以转换为正确的类型。 void Print(const int &a){} int main(void) { int x = 10; //Swap(3); //< 错误:传入的参数为非左值,则编译器会报错,禁止生成临时变量接收3 //Swap(3+x); //< 错误:3+x为非左值,而是一个表达式,禁止生成临时变量来接收3+x的值 Print(3); //< 正确:传入的参数为非左值,则会生成1个临时变量,让形参a的引用指向这个临时变量,函数使用完后,临时变量才销毁 Print(3+x); //< 正确:传入的为非左值,而是一个表达式,会生成临时变量来接收3+x的值,让形参a指向这个临时变量,函数使用完后临时变量才销毁 system("pause"); return 0; }
《C++ Primer Plus》第六版 —— 8.2.3 引用的属性和特别之处
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)