2016-11-30 97 views
1

A,B和C呼叫之間有什麼區別?模板調用有什麼區別?

#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

同樣的事情,不同的返回值,一些隱式轉換(浮動 - >雙) – Fefux

+0

這是你如何找出產生什麼功能: 到函數中加入這一行: '的std ::法院<<(__PRETTY_FUNCTION__) << std :: endl;' –

回答

2

max首先調用實際上是max<float>,第二個和第三個是相同max<double>

但在第二次調用都ab得到提升一倍,其中在第三個例子僅6.0f提升爲兩倍。

-1

A調用std::max<float>,因爲a和b是浮點參數。在B和C中,您強制它調用std::max<double>,因此兩個參數都轉換爲double。