2017-02-28 2 views
-5

Warum ist die Ausgabe dieser beiden Programme gleich?mit Vorlage (dasselbe Ergebnis)

Beispiel 1

template < typename T1, typename T2 > 
T1 sumit(T1 a, T2 b) 
{ 
    T2 result = (a + b); 
    return result; 
} 
int main() 
{ 
    cout << sumit(1, 'a'); 
} 

Beispiel 2

template < typename T1, typename T2 > 
T1 sumit(T1 a, T2 b) 
{ 
    T1 result = (a + b); 
    return result; 
} 

int main() 
{ 
    cout << sumit(1, 'a'); 
} 

Was deference zwischen T1 und T2 Ergebnis Ergebnis?

+0

Bitte nehmen Sie sich die Zeit, um Ihre Beispiele zu bereinigen. Die Darstellung von unordentlichem oder seltsam formatiertem Code (einschließlich übermäßigem Leerraum oder Einrückung) wird viele Benutzer abweisen. –

Antwort

1

In beiden Fällen übergeben Sie das erste Argument als int und das zweite als char. So wird T1 int und T2 wird char.

Im ersten Fall speichern Sie das Ergebnis von in einer char -Variable (als T2 ist hier ein char), aber beim Zurückgeben des Ergebnisses wird es ein int. In Ihrem Code fügen Sie nur 1 und 'a' und ASCII-Wert von 'a' ist 97. So ist das zurückgegebene Ergebnis 98. Sowohl char und int gibt die gleiche Antwort hier, weil eine char kann auch 98 speichern (char ist 1 Byte und seine Reichweite ist -128 bis 127; int ist 4 Bytes).

In Ihrem zweiten Programm speichern Sie die Summe in einer int-Variablen (wie T1 ist int), die die Summe von 1+'a', die 98 (int-Wert) ist, auf jeden Fall speichern kann.

So erhalten Sie das gleiche Ergebnis in beiden Fällen.

Wenn Sie einige große int Wert anstelle von 1 hinzugefügt hatten, würde das zurückgegebene Ergebnis von beiden Programmen abweichen. Wenn Sie beispielsweise 1200 and 'a' an die Funktion summit() übergeben, gibt das erste Programm 17 aufgrund eines Überlaufs des Bereichs char zurück, aber das zweite Programm gibt 1297 zurück (kein Überlauf bei int).

1

Im ersten Fall erstellen Sie ein T2-Element und geben es dann als T1-Element zurück (gemäß der Funktionssignatur). Im zweiten Programm erstellen Sie einen T1-Artikel und geben ihn als T1-Artikel zurück. In beiden Fällen wird ein T1 zurückgegeben und nicht ein T2.

+1

@utsav_deep Ich habe nie gesagt, dass sie gleichwertig sind, nur dass beide T1-Werte zurückgeben, was in diesem Beispiel ein int ist. – JGroven

+0

Ich habe meinen Kommentar gelöscht, nachdem ich das bemerkt habe. –

Verwandte Themen