C++ 当每个用户定义的转换方法被称为隐式时,规则是什么?

C++ 当每个用户定义的转换方法被称为隐式时,规则是什么?,c++,C++,在类的世界中,隐式转换可以由 三个成员功能的方式: Single-argument constructors: allow implicit conversion from a particular type to initialize an object. Assignment operator: allow implicit conversion from a particular type on assignments. Type-cast operator: allow implicit

在类的世界中,隐式转换可以由 三个成员功能的方式:

Single-argument constructors: allow implicit conversion from a particular type to initialize an object.
Assignment operator: allow implicit conversion from a particular type on assignments.
Type-cast operator: allow implicit conversion to a particular type.

我想知道这些不同的隐式转换是如何相互作用的。什么时候一个优先于其他?规则是什么?

其中一个,赋值运算符,不实现转换。您只需根据另一类型对象的数据修改一种类型对象的状态

什么时候一个优先于其他

当一个是一个更好的匹配重载决议。例如,如果源对象是非常量,而转换构造函数具有非常量参数,而转换运算符是常量限定的,则转换构造函数更匹配,因为标识转换的级别高于常量转换

如果不同的转换不明确,即两种转换都不能更好地匹配重载分辨率,则程序的格式不正确。一般来说,不需要有冲突的转换,应该避免。使用转换构造函数或转换运算符;不是两者都有

重载解析规则在标准的[over.match]部分中。这是一个相当长的部分,我不会复制到这里。

你想知道(如果你还没有)。