如何解决给定类型的转换运算符与构造函数哪个更好?
| 我正在为我的容器定义迭代器类型,当然我希望iterator
可转换为const_iterator
。但是我不确定哪个更好/更好:
iterator
中的转换算子
class iterator
{
operator const_iterator();
};
或const_iterator
中的非显式构造函数
class iterator
{
// implementation
friend class iterator; // hard to avoid this
};
class const_iterator
{
const_iterator(iterator const &);
};
有什么指导方针更好吗?
解决方法
仅当可以在不构造新对象的情况下返回所需类型,或者其返回值是简单数据类型时,才应编写转换运算符。例如,如果要返回对该类内属性的const引用,则应将其编写为强制转换运算符。
在所有其他情况下,您应该只编写适当的构造函数。
,作为基本规则:
几乎没有理由提供隐式转换运算符。始终最好使用转换构造函数。使用隐式转换运算符时,您很少会在不期望的情况下发现它们被调用并造成不必要的混乱。
转换构造函数也是一种更好的方法,因为它使您能够坚持最小惊讶原则。
此规则的唯一常见例外是将其转换为布尔类型,以便可以在布尔上下文中使用对象(例如,智能指针)。
,一些实现使ѭ0继承自ѭ1,并免费获得转换。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。