我正在为容器定义迭代器类型,当然我希望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 &);
};
是否有更好的指导方针?
答案 0 :(得分:1)
作为一般规则:
几乎 从不 提供隐式转化运算符; 首选 始终使用 转换构造函数 。使用隐式转换运算符,当您不期望并创建不必要的混淆时,很少会发现它们被调用。
转换构造函数 也是一种更好的方法,因为它可以让您遵循 Principle of least Astonishment。 强>
此规则的唯一常见例外是提供到布尔类型的转换,以便可以在布尔上下文中使用对象(例如,智能指针)。
答案 1 :(得分:1)
只有在可以在不构造新对象的情况下返回所需类型,或者返回是简单数据类型时,才应编写构造运算符。例如,如果要将const引用返回给类中的属性,则应将其写为转换运算符。
在所有其他情况下,您应该编写适当的构造函数。
答案 2 :(得分:0)
某些实现允许iterator
继承const_iterator
,并免费获得转化。