Bedenken Sie die Funktionsvorlage:
template<typename T> void printme(T&& t) { for (auto i : t) std::cout << i; }
Diese Funktion erwartet einen Parameter eines Typs mit einem Anfang () und end() Funktion.
Frage:
Warum ist der folgende Aufruf illegal?
printme({'a', 'b', 'c'});
Antwort:
Der Aufruf printme({'a', 'b', 'c'}) ist illegal, da das Vorlagenargument T nicht abgeleitet werden kann. Ohne explizite Angabe des Vorlagenarguments kann der Compiler den Typ des Parameters nicht bestimmen, da es sich um einen beliebigen Typ mit einer begin()- und end()-Funktion handeln kann. Dieses Problem tritt in den folgenden Fällen nicht auf:
Die Ausnahme hiervon ist die Ableitung von auto als std::initializer_list
Das obige ist der detaillierte Inhalt vonWarum ist „printme({\'a\', \'b\', \'c\'});' bei der C-Vorlagentyp-Ableitung illegal?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!