一个小小的背景。
在类的世界中,隐式转换可以通过三个成员函数来控制: 单参数构造函数:允许从特定类型隐式转换来初始化对象。赋值运算符:允许在赋值时从特定类型隐式转换。类型转换操作符:允许隐式转换到特定类型。
我想知道这些不同的隐式转换是如何相互作用的。什么时候一个凌驾于其他人之上?规则是什么?
发布于 2020-05-27 19:39:39
其中之一,赋值运算符,不实现转换。您只需根据来自另一个类型的对象的数据修改一种类型的对象的状态。
什么时候一个凌驾于其他人之上?
当一个人是一个更好的匹配过载决议。例如,如果源对象是非const,而转换构造函数具有非const参数,而转换运算符是const限定的,则转换构造函数是更好的匹配,因为身份转换排序高于const转换。
如果不同的转换是模棱两可的,即对于过载解析两者都不是一个更好的匹配,那么程序就是错误的。一般来说,没有必要有冲突的转换,它们应该避免。要么使用转换构造函数,要么使用转换运算符;而不是两者都使用。
过载解析规则载于标准的over.match部分。这是一个相当长的部分,我不会在这里复制它。
https://stackoverflow.com/questions/62051249
复制相似问题