通过引用和值返回*之间的区别

jia*_*afu -3 c++ pointers

如果跟随代码示例之间存在差异?

ClassTwo ClassTwo::getOwnOne(){
    return *this;
}


 ClassTwo& ClassTwo::getOwnTwo(){
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

如果跟随代码示例之间存在差异?是一样的吗?

Mik*_*our 9

ClassTwo ClassTwo::getOwnOne()
Run Code Online (Sandbox Code Playgroud)

这将返回它被调用的对象的副本.

ClassTwo& ClassTwo::getOwnTwo()
Run Code Online (Sandbox Code Playgroud)

这将返回对其调用的对象的引用.

如果使用结果创建新对象,它们(或多或少)都会做同样的事情:

ClassTwo c2a = c2.getOwnOne(); // New object
ClassTwo c2b = c2.getOwnTwo(); // New object too
Run Code Online (Sandbox Code Playgroud)

但如果您使用它们来初始化引用,则会有所不同:

ClassTwo const & c2a = c2.getOwnOne(); // New object (lifetime tied to reference)
ClassTwo const & c2b = c2.getOwnTwo(); // Reference to c2

ClassTwo & c2a = c2.getOwnOne(); // ERROR
ClassTwo & c2b = c2.getOwnTwo(); // Reference to c2
Run Code Online (Sandbox Code Playgroud)

第三个是错误,因为您无法将可变引用绑定到临时对象.