3

嗨,我想知道做和做有什么区别

template <typename T> class List :
   T& getData();        
AND
   T getData();
};     
4

2 回答 2

9

鉴于这T是一个类型,T&是对 type 对象的引用T

T getData();是一个返回类型对象的函数T。这意味着,无论函数返回什么都将被复制,调用者将收到此副本。这称为“复制返回”。在实践中,并不总是需要生成副本,编译器可以将其优化掉(这称为“复制省略”)。

T& getData();是一个返回对类型对象的引用的函数T。这很容易理解,称为“通过引用返回”,意味着返回的对象没有被复制。相反,您只需返回对其在内存中位置的引用,通过该引用可以访问原始对象。使用它时,必须注意返回的引用不会在它所引用的对象的生命周期之外使用。

如果您不确切知道引用是什么,它本质上是一个别名,用于引用某个变量。它通常用作指针的更安全替代方案,尽管与指针不同,它本身不是对象,并且您永远不能引用引用本身,因此不能更改它所引用的内容。

如果您想了解更多信息,维基百科页面非常有用。

于 2013-01-19T10:45:50.293 回答
2
 T& getData(); returns a reference to T        

 T getData(); returns a copy of T

什么是 C++ 参考:链接

于 2013-01-19T10:31:12.407 回答