给定类型的转换运算符与构造函数哪个更好?

问题描述

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...