运算符 T&() 还是运算符 T()?
operator T&() or operator T()?
在定义转换运算符时,定义
有什么好处吗?
operator T() const;
超过
operator T&();
operator const T&() const;
假设我不关心返回值而不是引用的潜在性能提升。
我觉得要看情况。第一种方法 returns 可以在不改变原始对象的情况下修改新对象。第二种方法 returns 对现有对象的引用。如果你改变这个对象,你也会改变原来的对象。
哪一个适合你来决定;没有普遍优势。
第二种方法肯定更好。
对于第一种方法,调用代码需要来制作返回对象的副本,这可能很昂贵。
使用第二种方法,调用代码可以选择制作或不制作副本。
当您负责 class/library 时,您不想对没有解决方法的性能瓶颈负责。
第二种方法的一个主要缺点是调用代码可能会留下悬空 pointer/reference。为了帮助您的用户,您必须清楚地记录返回的引用的有效期。希望您的用户注意并做正确的事。
在定义转换运算符时,定义
有什么好处吗?operator T() const;
超过
operator T&();
operator const T&() const;
假设我不关心返回值而不是引用的潜在性能提升。
我觉得要看情况。第一种方法 returns 可以在不改变原始对象的情况下修改新对象。第二种方法 returns 对现有对象的引用。如果你改变这个对象,你也会改变原来的对象。
哪一个适合你来决定;没有普遍优势。
第二种方法肯定更好。
对于第一种方法,调用代码需要来制作返回对象的副本,这可能很昂贵。
使用第二种方法,调用代码可以选择制作或不制作副本。
当您负责 class/library 时,您不想对没有解决方法的性能瓶颈负责。
第二种方法的一个主要缺点是调用代码可能会留下悬空 pointer/reference。为了帮助您的用户,您必须清楚地记录返回的引用的有效期。希望您的用户注意并做正确的事。