C++ 如果我重新定义sqrt函数,为什么使用std::sqrt失败? #包括 双sqrt(双); int main() { 双a=std::sqrt(4.0); std::cout

C++ 如果我重新定义sqrt函数,为什么使用std::sqrt失败? #包括 双sqrt(双); int main() { 双a=std::sqrt(4.0); std::cout,c++,function,namespaces,std,redefine,C++,Function,Namespaces,Std,Redefine,使用命名空间std;在某处搜索代码以查找。可能隐藏在其他一组包含文件中。无法复制。这是您的实际代码吗?什么编译器/平台?在Windows上使用Visual Studio 2019:clang cl编译时没有警告,并给出2的输出(即调用std::sqrt)。但是,MSVC编译器不喜欢它:错误C2169:“sqrt”:无法定义内在函数。使用MSVC可以重现此问题。@AdrianMole@AdrianMole,在我的本地版本与使用MSVC的2019版本中,结果也是1。将使用命名空间std;添加到OP的

使用命名空间std;在某处搜索代码以查找
。可能隐藏在其他一组包含文件中。

无法复制。这是您的实际代码吗?什么编译器/平台?在Windows上使用Visual Studio 2019:clang cl编译时没有警告,并给出
2
的输出(即调用
std::sqrt
)。但是,MSVC编译器不喜欢它:错误C2169:“sqrt”:无法定义内在函数。使用MSVC可以重现此问题。@AdrianMole@AdrianMole,在我的本地版本与使用MSVC的2019版本中,结果也是1。将
使用命名空间std;
添加到OP的代码中对clang cl和MSVC没有任何影响!与我的命令中的结果相同OP的代码是未定义的行为(请参阅建议的副本)。
#include<iostream>

double sqrt(double);

int main()
{
    double a = std::sqrt(4.0);
    std::cout << a; 
    return 0;
}

double sqrt(double a)
{
    return 1.0;
}