运算符 T&() 还是运算符 T()?
operator T&() or operator T()?
本文关键字:运算符 更新时间:2023-10-16
在定义转换运算符时,定义转换运算符有什么好处吗
?operator T() const;
多
operator T&();
operator const T&() const;
假设我不关心返回值而不是引用的潜在性能提升。
第二种方法肯定更好。
使用第一种方法时,调用代码需要创建返回对象的副本,这可能很昂贵。
使用第二种方法,调用代码可以选择制作或不制作副本。
当您负责类/库时,您不希望对性能瓶颈负责,因为它们没有解决方法。
第二种方法的一个主要缺点是调用代码可能会留下一个悬而未决的指针/引用。为了帮助您的用户,您必须清楚地记录返回的引用的有效期。希望您的用户能够注意并做正确的事情。
我认为这取决于情况。第一种方法返回一个新对象,可以在不更改原始对象的情况下对其进行修改。第二种方法返回对现有对象的引用。如果更改此对象,则还将更改原始对象。
哪一个是你有权决定的;没有普遍的优势。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 如何防止clang格式在流运算符调用之间添加换行符<<