C++ Primier疑惑:转换函数的过度使用导致二义性
C++ Primier原文:
如果有一个表示 Date 的类,我们可能会认为提供从 Date 到 int 的转换是个好主意,但是,这个转换函数应返回什么值?该函数可以返回公历日期,这是表示当前日期的一个顺序数,以 0 表示 1 月 1 日,但年份是否应放在日期之前或之后?即,1986 年 1 月 31 日是否应表示为 1986031 或 311986?作为一种选择,转换操作符可以返回一个表示从某个新纪元点开始计数的天数,计数器可以从 1971 年 1 月 1 是或其他起始点开始计算天数。
问题在于,无论怎样选择,Date 对象的使用将具有二义性,因为没有一个 Date 类型对象与 int 类型值之间的一对一映射。在这种情况下,不定义转换函数更好。相反,这个类应该定义一个或多个普通成员从这些不同形式中抽取信息。
我的问题:
为什么“无论怎样选择,Date 对象的使用将具有二义性”?
Date类型对象可以与int类型值一一映射啊,如题所说“转换操作符可以返回一个表示从某个新纪元点开始计数的天数”,这样可以使每个Date对应一个int型值啊(如果没有超出int取值范围的话)。
难道要考虑int型值的取值范围吗?
如果考虑int型值的取值范围及其溢出,那么 多个Date就可以对应一个相同的int型值,这种情况不叫二义性吧?
我对二义性的理解:
编译器进行函数调用时,对多个候选函数无从取舍而导致二义性。
这样理解对吗?
初学C++,希望大家不吝赐教!
[解决办法]
Date 对象的使用将具有二义性// 个人认为这里的二义性和函数调用时的二义性是不一样的。它是说data有种多转换成int的方式。所以容易有歧义···
[解决办法]