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

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

最佳答案

鉴于 T 是一种类型, T& 是对 T 类型对象的引用。
T getData(); 是一个函数,它返回一个 T 类型的对象。这意味着,无论函数返回什么,都将被复制,调用者将收到此拷贝。这称为“复制返回”。在实践中,并不总是需要生成拷贝,编译器可以将其优化掉(称为“复制省略”)。
T& getData(); 是一个函数,它返回对 T 类型的对象的引用。很容易理解,这称为“通过引用返回”,这意味着返回的对象不会被复制。相反,您只需返回对其在内存中的位置的引用,通过该引用可以访问原始对象。使用它时,必须注意返回的引用不会在它引用的对象的生命周期之外使用。

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

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

关于c++ - T 和 T& 之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14413376/

10-11 18:16