隐性铸造表现奇怪

时间:2014-06-21 19:37:39

标签: c++ implicit-conversion

我对以下代码的隐式转换有疑问

#include <iostream>
using namespace std;


float max(int a, int b)
{
    if (a > b)
        return a;
    else return b;

}

int main() {
    double a, b;
    cin >> a >> b;
    cout << max(a, b)<<endl;
    cout << a;


    return 0;
}

现在假设a = 30.5 & b = 26.4

预期结果为30但是在一台计算机上(MinGW&amp; VS 2005),我得到30.5

有人对此有解释吗?这对我没用。

编辑1: Implicit conversion acting strangely

第三行输出的

是30.5而不是预期的30

解决方案
std :: max()正在遮蔽它,但为什么它会在一台计算机上影响它并且它不在另一台计算机上,我没有调查它。
因此,请尽量避免使用为标准库保留的名称来命名函数或类。

1 个答案:

答案 0 :(得分:4)

这是什么导致奇怪的输出:

using namespace std;

致电max()时,您可能正在调用std::max()<iostream>可能无法保证cout << ::max(a, b)<<endl; //forces global scope 。试试这个:

30

应打印出{{1}}。