【问题标题】:operator T&() or operator T()?运算符 T&() 还是运算符 T()?
【发布时间】:2016-01-29 05:09:43
【问题描述】:

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

operator T() const;

结束

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

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

【问题讨论】:

  • operator T&(); 不像其他人。据推测,它会返回对类成员的引用;然后调用者将能够修改所述成员。其他两种口味不允许这样做。

标签: c++ reference conversion-operator


【解决方案1】:

第二种方法肯定更好。

第一种方法需要调用代码来复制返回的对象,这可能很昂贵。

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

当您负责一个类/库时,您不想为性能瓶颈负责,而这些瓶颈无法解决。

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

【讨论】:

  • 另一方面,第二个可用于创建悬空引用。所以各有利弊。
  • @M.M 用户在创建引用或指针时应该注意这一点。这并不特定于问题中提出的情况。
【解决方案2】:

我认为这取决于情况。第一种方法返回一个可以在不改变原始对象的情况下修改的新对象。第二种方法返回对现有对象的引用。如果你改变了这个对象,你也会改变原来的对象。

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

【讨论】:

  • 如果对象不被修改,用户应该const限定它。因此,如果您不想修改原始对象,请制作副本。
  • @Lingxi:你为什么要问一个问题,然后试图告诉几个回答的人应该是什么?询问并聆听,或者随意发布您自己的答案,并让其他读者根据其优点对其进行上/下投票......这就是这样;-p。
  • @TonyD 感谢您向我提及。我会记住这一点,下次做正确的事:-)
猜你喜欢
  • 2011-07-21
  • 1970-01-01
  • 2010-10-03
  • 2014-10-27
  • 2016-02-21
  • 2011-08-25
  • 2016-11-05
  • 2017-09-15
  • 2018-04-29
相关资源
最近更新 更多