参数成本的参数分类

重载决策将将参数传递给参数的成本划分为四种不同的类别之一,称为序列。每个序列可包括零次,一次或几次转换

  • 标准转换顺序

    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});
    

一般原则是标准转换序列是最便宜的,其次是用户定义的转换序列,接着是省略号转换序列。

一种特殊情况是列表初始化序列,它不构成转换(初始化列表不是具有类型的表达式)。其成本是通过将其定义为等于其他三个转换序列之一来确定的,具体取决于参数类型和初始化列表的形式。