以下のコードでは、両方のバージョンのprintメソッドを使用して、最初の呼び出しがinitializer_listを持つ呼び出しに解決されます。 initializer_listで定義をコメントアウトすると、プログラムはシームレスにベクトルバージョンを使用します。最初のケースでは、コンパイラが不平を言うのを期待していました!コンパイラはvectorとinitializer_listのどちらを決定するのですか?
#include <iostream>
#include <vector>
using namespace std;
void print(const vector<int>& v1){
cout << "vector \n";
}
void print(const initializer_list<int>& il) {
cout << "init list \n";
}
int main() {
print({1,2,3,4,5});
return 0;
}
これは、C++で過負荷解決が機能する方法です。 – 101010