過載解析度

過載解決在幾種不同的情況下發生

  • 呼叫指定的過載函式。候選者是通過名稱查詢找到的所有功能。
  • 呼叫類物件。候選者通常是該類的所有過載函式呼叫操作符。
  • 使用運算子。候選者是名稱空間範圍內的過載操作符函式,左側類物件(如果有)中的過載操作符函式和內建運算子。
  • 過載決策以找到正確的轉換運算子函式或建構函式以呼叫初始化
    • 對於非列表直接初始化(Class c(value)),候選者是 Class 的建構函式。
    • 對於非列表複製初始化(Class c = value)以及查詢使用者定義的轉換函式以在使用者定義的轉換序列中呼叫。候選者是 Class 的建構函式,如果源是類物件,則其轉換運算子起作用。
    • 用於從類物件(Nonclass c = classObject)初始化非類。候選者是初始化物件的轉換運算子函式。
    • 對於使用類物件(R &r = classObject)初始化引用,當類具有轉換運算子函式時,它們生成的值可以直接繫結到 r。候選者是這樣的轉換操作符函式。
    • 對於非聚合類物件(Class c{1, 2, 3})的列表初始化,候選者是第一次通過過載決策的初始化列表建構函式。如果找不到可行的候選者,則通過過載解析完成第二次傳遞,將 Class 的建構函式作為候選者。