今天给一个学生调试 c++ 代码。 他的代码大致如下。
uisng namepsace std;
void move(long n) {
.....
}
int main() {
long n;
cin >> n;
...
move(
1);
move(n);
...
return 0;
}
然后发现死活 move(1) 进不去。。。。想了一下。这是一个特别神奇的事情。。。。 c++11 里面自带一个 move() 函数。由于定义的是move(long n)。调用move(n)会正确优先匹配定义的函数。但是调用move(1)的时候编译器会去找一个move(int)的函数,所以先找到了系统中匹配的move函数。如果没有开 c++11 ,move(1)的 1 会被强制转换成(long)1 然后调用move(long)。所以尽量不要自定义系统函数。
转载请注明原文地址: https://ju.6miu.com/read-1262.html