Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 电讯管理局;()或运算符T()?_C++_Reference_Conversion Operator - Fatal编程技术网

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;