过载分辨率

过载解决在几种不同的情况下发生

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