在定义转换运算符时,定义
operator T() const;
超过
operator T&();
operator const T&() const;
假设我不关心返回值而不是引用的潜在性能增益。
在定义转换运算符时,定义
operator T() const;
超过
operator T&();
operator const T&() const;
假设我不关心返回值而不是引用的潜在性能增益。
我认为这取决于情况。第一种方法返回一个可以在不改变原始对象的情况下修改的新对象。第二种方法返回对现有对象的引用。如果更改此对象,您也将更改原始对象。
哪一个是您决定的权利;没有普遍的优势。
第二种方法肯定更好。
第一种方法需要调用代码来复制返回的对象,这可能很昂贵。
使用第二种方法,调用代码可以选择制作或不制作副本。
当您负责一个类/库时,您不想对性能瓶颈负责,因为它们不是解决方法。
第二种方法的一个主要缺点是调用代码可能会留下一个悬空指针/引用。为了帮助您的用户,您必须清楚地记录返回的参考资料的有效期。希望您的用户会注意并做正确的事情。