引用---引用型返回值

来源:互联网 发布:压缩弹簧计算软件 编辑:程序博客网 时间:2024/05/17 23:16

一.返回左值

•值形式的函数返回值通常都具有右值属性,即在函数的调用者空间根据函数的返回类型创建一个匿名对象,负责接收该函数的返回值

•用于接收函数返回值的匿名对象和表达式的值类似,通常只具有语句级生命期且只读,即所谓将亡右值

•如果函数返回的是一个引用,那么用于接收该返回值的就不再是一个匿名的将亡右值对象,而是一个引用该函数所返回引用的目标对象的引用,甚至可以是左值引用

•函数返回的左值引用可与其它任何形式的左值一样,参与包括赋值、复合赋值、自增减等在内的各种左值运算

二.不能返回局部变量的引用

•函数的局部变量只具有函数级甚至块或语句级的生命周期,函数一旦返回,所有的局部变量即刻销毁,即使通过返回值获得了对它们的引用,其目标也将是未定义的

int& foo (void)  {     int n = 123;     return n;  } // 危险  int* bar (void)  {     int n = 456;     return &n;  } // 危险  int hum (void)  {     int n = 789;     return n;  }–int& foo (int& n)  {     return n;  } int& bar (int* n)  {     return *n;  }  int& hum (int n)  {     return n;  } // 危险int* foo (int& n)  {     return &n;  }  int* bar (int* n)  {     return n;  }  int* hum (int n)  {     return &n;  } // 危险
原创粉丝点击