避免有二义性的类型转换
来源:互联网 发布:人民币账户黄金软件 编辑:程序博客网 时间:2024/06/05 04:06
如果类中包含一个或多个类型转换,则必须确保在类类型和目标类型之间只存在唯一一种转换方式。
在两种情况下可能产生多重转换路径。第一种情况是两个类提供相同的类型转换:例如,当A类定义了一个接受B类型对象的转换构造函数,同时B类定义了一个转换目标是A类的类型转换运算符时,我们就说它们提供了相同的类型转换。
第二种情况是类定义了多个转换规则,而这些转换涉及的类型本身可能通过其他类型转换联系在一起。最典型的例子是算术运算符。
通常情况下,不要为类定义相同的类型转换,也不要在类中定义两个及两个以上转换源或转换目标是算术类型的转换。
在下面例子中,我们定义了两种将B转换成A的方法:一种使用B的类型转换运算符、另一种使用A的以B为参数的转换构造函数:
// 最好不要在两个类之间构建相同的类型转换struct B;struct A{A() = default;A(const B&); // 把一个B转换成A};struct B{ operator A() const; // 把一个B转换成A};A f(const A&);B b;A a = f(b); // 二义性错误:含义是f(B::operator A()) // 还是f(A::A(const B&))?
另外如果类定义了一组类型转换,它们的转换源(或者转换目标)类型本身可以通过其他类型转换联系在一起,则同样会产生二义性问题。
0 0
- 避免有二义性的类型转换
- oracle 性能优化操作二:避免不必要的类型转换
- oracle 性能优化操作二:避免不必要的类型转换
- 避免使用隐式类型转换
- android findView 如何避免类型转换
- Effective C# Item28:避免强制类型转换
- 通过重载避免隐式类型转换
- 一个困惑的类层次设计根据:回调函数,避免向下类型转换(转)
- More Effective C++----(4)避免无用的缺省构造函数 & (5)谨慎定义类型转换函数
- C++编码军规(002):避免在C++中使用C形式的强制类型转换
- 《Effective C#》 Item 28: 避免使用类型转换操作符
- 利用泛型避免工厂方法强制类型转换
- 提高你的Java代码质量吧:避免基本类型数组转换列表陷阱(Arrays.asList())
- union可以避免c++的类型检查
- 避免使用Oracle的char类型
- 基本类型的类型转换
- 基本类型的类型转换
- java的类型转换
- EL表达式和JSTL标签
- BZOJ 2440(莫比乌斯函数的应用)
- 算法实验二 TEST #1
- 输入子系统之按键驱动
- DNS BIND 搭建域名智能解析DNS服务器之动态添加解析
- 避免有二义性的类型转换
- Five Minute Presentation
- Java《final关键字》
- 一个关于消除数据依赖性的问题
- 25.创业真的需要app吗?真的需要外包吗?
- jQuery插件学习(一)
- hdu 1541 Stars
- HDU2647 Reward(拓扑排序)反向建图
- JDBC四种驱动类型