initlializer_list aşağıdaki fonksiyon şablon var:Fonksiyon şablon kesinti ve
template <typename K, typename V>
void f(std::initializer_list<std::pair<const K, V>> il)
{
//...
}
şöyle ben işlevi çağırmak:
f({std::pair<const int,int>(1,2), std::pair<const int,int>(3,4)}); //(a)
ve iyi çalışıyor. Doğru tipini anlamak mümkün değildir
f({{1,2}, {3,4}}); //(b)
ve ben çizgisinde bir derleme hatası alıyorum: Ben denemek ve onu ararsanız
Ancak şöyle
'no matching function for call to 'f(<brace-enclose initializer list>)
note candidate is:
note: template <class K, class V> void f(std::initializer_list<std::pair<const K, V>>)'
f({std::pair<const int,int>(1,2), {3,4}}); //(c)
tip kesinti çalışır ama denemek ve onu ararsanız şöyle: Ben onu aramak aşağıdaki gibi
f({std::make_pair(1,2), {3,4}}); //(d)
Daha önce olduğu gibi aynı derleme hatasını alıyorum.
Sorum şu:
neden (c) 'de şablon türü kesinti iş ama değil (d)' de?
Ben benzer baktım, yaşlı SO mesajların (Derleyici bayrak -std = C++ 11 ile gcc v4.6.3) ama onlar oldukça bu soruyu cevaplamak için görünmedi.
çiftinin ilk kısmı için
const int
üretmeyecek, ancak, b) in const_ const öğesinden const olmayan int'yi unuttuğunu düşündüm. Teşekkürler. – TPJ'{1,2}', '' initializer_list'' için alınmadı '', bir 'initializer_list 'ile eşleşmediği sürece, sonuç çıkarılmamış bir bağlamdır. Bir fark var (eğer derleyici aslında 0 {0,) 'dan {1, 2}' den '' 1 '' 2 '' sonucunu çıkarsa, (c) derleme yapmaz). –
Cümle reworded, teşekkürler! –