如果跟随代码示例之间存在差异?
ClassTwo ClassTwo::getOwnOne(){
return *this;
}
ClassTwo& ClassTwo::getOwnTwo(){
return *this;
}
Run Code Online (Sandbox Code Playgroud)
如果跟随代码示例之间存在差异?是一样的吗?
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)
第三个是错误,因为您无法将可变引用绑定到临时对象.