引數成本的引數分類

過載決策將將引數傳遞給引數的成本劃分為四種不同的類別之一,稱為序列。每個序列可包括零次,一次或幾次轉換

  • 標準轉換順序

    void f(int a); f(42);
    
  • 使用者定義的轉換順序

    void f(std::string s); f("hello");
    
  • 省略號轉換序列

    void f(...); f(42);
    
  • 列出初始化序列

    void f(std::vector<int> v); f({1, 2, 3});
    

一般原則是標準轉換序列是最便宜的,其次是使用者定義的轉換序列,接著是省略號轉換序列。

一種特殊情況是列表初始化序列,它不構成轉換(初始化列表不是具有型別的表示式)。其成本是通過將其定義為等於其他三個轉換序列之一來確定的,具體取決於引數型別和初始化列表的形式。