模板调用之间的区别是什么?

时间:2016-11-30 11:53:18

标签: c++ templates

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
}

2 个答案:

答案 0 :(得分:2)

max<float>的第一次调用实际上是max<double>,第二次和第三次调用是a

但是在第二次调用中,b6.0f都被提升为double,其中第三个示例{{1}}被提升为double。

答案 1 :(得分:-1)

调用std::max<float>,因为a和b是浮点参数。在B和C中,强制它调用std::max<double>,因此两个参数都转换为double。