GESP 四级 · GESP 202509 C++ 四级 第 4 题

选择题 · 答案 A · 考点:函数

← 整套速查表 GESP 四级 全部真题

题目

下面这段代码会输出( )。

int add(int a, int b = 1); // 函数声明

int main() {
    cout << add(2) << " " << add(2, 3);
    return 0;
}

int add(int a, int b) { // 函数定义
    return a + b;
}
答案:A

考点

函数

解题思维

答案A。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。

常见错误

指针和数组追踪时画内存布局图可以大大简化理解。

详细解析(节选)

【考点】默认参数|函数声明与定义

GESP四级默认参数必考,考点在于区分声明与定义处的规则差异。命题人专卡新手对C++默认参数机制的误解——以为定义处需显式写默认值,实则只需声明处指定即可。

先看声明int add(int a, int b = 1);,b有默认值1,调用add(2)时b自动补1,得3;再看定义int add(int a, int b){return a+b;},b虽无默认但声明已给,add(2,3)直接传3,得5。通法:默认参数只在声明处生效,定义处可省略,调用时优先用实参,无实参才用默认值。

B选项是最大陷阱:定义处少了默认参数。很多人背"C++默认参数必须在定义处写",其实这是错的,声明处指定即可。D选项链接失败更是离谱——函数既有声明又有定义,链接器不会报错。C选项运行错误纯属臆想,add(2)和add(2,3)都是合法调用,无运行时异常。

反命题思维:若定义处写b = 2,则add(2,3)会因参数冲突报错;若声明处无默认,add(2)就会编译失败。遇到默认参数题,先问"声明处有没有默认值",再问"调用时传了几个参数",别被定义处的参数列表误导。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断