T和T&之间的区别?

Lol*_*lau 0 c++ templates

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

template <typename T> class List :
   T& getData();        
AND
   T getData();
};     
Run Code Online (Sandbox Code Playgroud)

Age*_*ien 6

鉴于它T是一个类型,T&是对类型对象的引用T.

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

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

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

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