在C++中初始化引用和变量

Pet*_*erM 4 c++

给出以下c ++函数:

int& ReturnAReference() {
   /* Do something here */
}
Run Code Online (Sandbox Code Playgroud)

这两个陈述之间有什么区别:

int normalVariable = ReturnAReference();
int& referenceVariable = ReturnAReferene();
Run Code Online (Sandbox Code Playgroud)

一个版本比另一个更受欢迎吗?

wil*_*ick 9

关于这个:

int normalVariable = ReturnAReference();
Run Code Online (Sandbox Code Playgroud)

normalVariable是一个整数,并赋予ReturnAReference()引用的int的值.因此,增加,分配或做任何其他事情都normalVariable不会影响ReturnAReference()内部的任何内容.

关于这个:

int& referenceVariable = ReturnAReference();
Run Code Online (Sandbox Code Playgroud)

referenceVariable是对整数的引用,否则该整数将在其内部ReturnAReference().因此,增加,分配或做任何其他事情referenceVariable 都会影响ReturnAReference()内部的任何事情.

什么是首选取决于你想要完成什么,但在许多情况下,第二种方法(使用referenceVariable)违反了"封装"(http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)),这是认为设计不佳.

编辑:我应该补充一点,如果ReturnAReference()返回对该函数中本地变量的引用,那么一旦ReturnAReference()返回,该引用将无效.