Warum wird T als int abgeleitet und nicht als const int, warum sollte ich ein in der Funktion modifizieren können?
Weil du einen Wert übergibst und einen Wert empfängst (nicht als Referenz). Gemäß der Sprachgrammatik würde diese Ableitung immer Vorrang vor const haben.
Zur besseren Verständnis versuche untenstehenden C++11-Code und drucke den typeid
aus:
const int a = 5; // `a` typeid ist `const int`
auto b = a; // `b` typeid ist `int`
Wie funktioniert die Ableitung in diesem Fall?
Wenn du möchtest, dass a
nicht veränderbar ist und die Konstanz des übergebenen Objekts respektiert, dann empfange es per Referenz in der Funktion. d.h.
template
void foo (T& a)
{
a = 10; // dies führt zu einem Fehler, wenn `a` eine `const int` ist
}
[Hinweis: Das Übergeben eines Literals würde mit obiger Signatur niemals funktionieren.]