C++ 电讯管理局;()或运算符T()?
在定义转换运算符时,定义C++ 电讯管理局;()或运算符T()?,c++,reference,conversion-operator,C++,Reference,Conversion Operator,在定义转换运算符时,定义 operator T() const; 结束 假设我不关心返回值而不是引用时的潜在性能增益。我认为这取决于具体情况。第一种方法返回一个新对象,该对象可以在不改变原始对象的情况下进行修改。第二种方法返回对现有对象的引用。如果更改此对象,也将更改原始对象 你必须决定哪一个适合你;没有普遍的优势。第二种方法肯定更好 对于第一种方法,需要调用代码来创建返回对象的副本,这可能会很昂贵 对于第二种方法,调用代码可以选择制作或不制作副本 当您负责一个类/库时,您不想对性能瓶颈负责,
operator T() const;
结束
假设我不关心返回值而不是引用时的潜在性能增益。我认为这取决于具体情况。第一种方法返回一个新对象,该对象可以在不改变原始对象的情况下进行修改。第二种方法返回对现有对象的引用。如果更改此对象,也将更改原始对象
你必须决定哪一个适合你;没有普遍的优势。第二种方法肯定更好 对于第一种方法,需要调用代码来创建返回对象的副本,这可能会很昂贵 对于第二种方法,调用代码可以选择制作或不制作副本 当您负责一个类/库时,您不想对性能瓶颈负责,因为它们不是解决办法
第二种方法的一个主要缺点是调用代码可能会留下一个悬空的指针/引用。为了帮助用户,您必须清楚地记录返回的引用的有效期。希望您的用户会注意并做正确的事情。
操作员T&()代码>与其他代码不同。据推测,它将返回对类成员的引用;然后调用方将能够修改所述成员。另一方面,第二个可以用来创建一个悬空引用。因此,每种方法都有优点和缺点。@M.M用户在创建引用或指针时应该注意这一点。这并不特定于问题中提出的情况。如果不希望修改对象,则用户应const
对其进行限定。所以,如果你不想修改原始对象,那就复制一个。@Lingxi:你为什么问一个问题,然后试图告诉几个回答这个问题的人答案应该是什么?询问并倾听,或者随意发布你自己的答案,让其他上下读者根据其优点进行投票。。。就是这样-p、 @TonyD谢谢你跟我提起这件事。我会记住这一点,下次做正确的事情:-)
operator T&();
operator const T&() const;