C++中的模板正在做一些我没想到的事情

Ste*_*rup -3 c++ templates

这段代码给了我输出:

The sqrt of 1.234 is: 1.52276 why is this diffrent from: 1.11086 1.11086
Run Code Online (Sandbox Code Playgroud)

为什么?

#include <iostream>
using namespace std;

template<typename T>
T sqrt(T x)
{
    return x*x;
}

template<typename T>
void print_sqrt(T x)
{
    double tmp = sqrt(x);
    cout << "The sqrt of " << x << " is: " << sqrt<double>(x) << " why is this diffrent from: " << sqrt(x) << " " << tmp << endl;
}


int main()
{
    print_sqrt<double>(1.234);
    system("pause");
}
Run Code Online (Sandbox Code Playgroud)

Gez*_*ore 8

std::sqrt功能(也就是当没有提供一个模板参数,你在呼唤什么)计算平方根,而你的版本计算方.

  • 这也是其中一个可以看出为什么`使用命名空间std;`不是最佳实践的情况之一. (5认同)