过载分辨率
过载解决在几种不同的情况下发生
- 调用指定的重载函数。候选者是通过名称查找找到的所有功能。
- 调用类对象。候选者通常是该类的所有重载函数调用操作符。
- 使用运算符。候选者是命名空间范围内的重载操作符函数,左侧类对象(如果有)中的重载操作符函数和内置运算符。
- 重载决策以找到正确的转换运算符函数或构造函数以调用初始化
- 对于非列表直接初始化(
Class c(value)
),候选者是Class
的构造函数。 - 对于非列表复制初始化(
Class c = value
)以及查找用户定义的转换函数以在用户定义的转换序列中调用。候选者是Class
的构造函数,如果源是类对象,则其转换运算符起作用。 - 用于从类对象(
Nonclass c = classObject
)初始化非类。候选者是初始化对象的转换运算符函数。 - 对于使用类对象(
R &r = classObject
)初始化引用,当类具有转换运算符函数时,它们生成的值可以直接绑定到r
。候选者是这样的转换操作符函数。 - 对于非聚合类对象(
Class c{1, 2, 3}
)的列表初始化,候选者是第一次通过重载决策的初始化列表构造函数。如果找不到可行的候选者,则通过重载解析完成第二次传递,将Class
的构造函数作为候选者。
- 对于非列表直接初始化(