问题描述
|
我正在为我的容器定义迭代器类型,当然我希望
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,并免费获得转换。