运算符 T&() 还是运算符 T()?

operator T&() or operator T()?

本文关键字:运算符      更新时间:2023-10-16

在定义转换运算符时,定义转换运算符有什么好处吗

operator T() const;

operator T&();
operator const T&() const;

假设我不关心返回值而不是引用的潜在性能提升。

第二种方法肯定更好。

使用第一种方法时,调用代码需要创建返回对象的副本,这可能很昂贵。

使用第二种方法,调用代码可以选择制作或不制作副本。

当您负责类/库时,您不希望对性能瓶颈负责,因为它们没有解决方法。

第二种方法的一个主要缺点是调用代码可能会留下一个悬而未决的指针/引用。为了帮助您的用户,您必须清楚地记录返回的引用的有效期。希望您的用户能够注意并做正确的事情。

我认为这取决于情况。第一种方法返回一个新对象,可以在不更改原始对象的情况下对其进行修改。第二种方法返回对现有对象的引用。如果更改此对象,则还将更改原始对象。

哪一个是你有权决定的;没有普遍的优势。