2016-11-30 11 views
1

Was ist der Unterschied zwischen den Anrufen A, B und C?Was ist der Unterschied zwischen Vorlagenaufruf?

#include <iostream> 

using namespace std; 

template<class T> T max(T a, T b) { 
    return (a >= b) ? a : b; 
} 

int main() { 
    float a = 4.0; 
    float b = 6.0f; 
    cout << max(a, b) << endl; //A 
    cout << max<double>(a, b) << endl; //B 
    cout << max<double>(4.0, 6.0f) << endl; //C 
} 
+0

Gleiche Dinge, außer Rückgabewert und einige implizite Konvertierung (float -> double) – Fefux

+0

Dies ist, wie Sie herausfinden, welche Funktion erzeugt wird: Um die Funktion dieser Zeile hinzu: 'std :: cout << (__PRETTY_FUNCTION__) << std :: endl; ' –

Antwort

2

ersten Aufruf von max ist eigentlich max<float>, zweite und dritte ist die gleiche max<double>

Aber in der zweiten Aufruf beide a und b erhalten zu verdoppeln gefördert, wo in dritte Beispiel nur 6.0f gefördert wird, zu verdoppeln .

-1

A ruft std::max<float>, da a und b Float-Argumente sind. In B und C erzwingen Sie es, std::max<double> aufzurufen, so werden beide Argumente in Double konvertiert.

Verwandte Themen