2016-11-30 106 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。