T和T&amp ;?之间的差异

时间:2013-01-19 10:30:10

标签: c++ templates

嗨我想知道做

之间有什么区别
template <typename T> class List :
   T& getData();        
AND
   T getData();
};     

2 个答案:

答案 0 :(得分:6)

鉴于T是一种类型,T&是对T类型对象的引用。

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

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

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

如果您想了解更多信息,Wikipedia page会非常有用。

答案 1 :(得分:2)

 T& getData(); returns a reference to T        

 T getData(); returns a copy of T

什么是C ++参考:link