C ++:函数重新声明一个未定义的行为?

时间:2016-06-30 14:16:37

标签: c++

代码:

#include <iostream>
using namespace std;

int f(int x = 0) {
    cout << "x:" << x << endl;
    return 0;
}
int main() {
    f();
    int f(int x = 1);
    f();
    return 0;
}

Output(在g ++ 5.1上测试):

x:0
x:1

我的问题:

  1. int f(int x = 1);是声明还是定义?
  2. 函数重新声明是否像未定义的行为一样?

1 个答案:

答案 0 :(得分:14)

来自dcl.fct.default中的§8.3.6:

  
      
  1. 对于非模板函数,可以在以后的函数声明中添加默认参数   相同的范围。不同范围内的声明具有完全不同的默认参数集。
  2.   

未定义的行为。你所看到的是强制性的。