3.1 函数与重载
答:______________
✅ 查看答案与解析
答案 错
解析:返回类型不能区分重载,会直接报错。重载靠参数列表(个数或类型)不同来区分。
答:______________
✅ 查看答案与解析
答案 对
解析:int f(int a, int b = 10); 合法;int f(int a = 1, int b); 不合法,因为跳过了左边的默认值。
合法
不合法,默认参数必须从右往左连续
不合法,函数不能有默认参数
合法但运行时出错
答:______________
✅ 查看答案与解析
答案 B
解析:默认参数必须从右往左连续填写,中间不能断。
int findValue(int x) {
if (x > 0) { return 1; }
// x <= 0 时走到这里,没有 return
}
✅ 查看答案与解析
答案 给所有路径补返回值,例如:
解析:函数必须保证所有路径都有返回值,否则是未定义行为。
int findValue(int x) {
if (x > 0) { return 1; }
return 0;
}提示:用条件运算符 a > b ? a : b。
✅ 查看答案与解析
答案 参考答案:
解析:先声明后使用;函数定义放在调用之前即可。
#include <iostream>
int maxOf(int a, int b) { return a > b ? a : b; }
int main() {
int a, b;
std::cin >> a >> b;
std::cout << maxOf(a, b) << '\n';
return 0;
}3.2 值、引用、指针传递
答:______________
✅ 查看答案与解析
答案 对
解析:int& r; 编译不过;r = b; 是把 b 的值赋给 a,不是让 r 改指 b。引用只是别名,没有自己的身份。
1
100
0
编译错误
答:______________
✅ 查看答案与解析
答案 B
解析:void byRef(int& x) { x = 100; } 传引用,改的就是原变量 a,所以 a 变成 100。
正常返回
返回一个拷贝
得到悬垂引用,使用它是未定义行为
编译一定报错
答:______________
✅ 查看答案与解析
答案 C
解析:局部变量在函数返回时销毁,返回它的引用得到悬垂引用。编译器通常给 -Wreturn-local-addr 警告。
int& bad() {
int x = 42;
return x; // x 离开函数就销毁了
}
✅ 查看答案与解析
答案 改成返回值:int bad() { int x = 42; return x; }
解析:按值返回局部对象通常零拷贝,不需要为了“性能”返回引用。
(编译器会做返回值优化 RVO,不拷贝。)提示:void swap(int& x, int& y) { int t = x; x = y; y = t; }
✅ 查看答案与解析
答案 参考答案:
解析:引用版 swap 改的就是原变量;如果用值传递,交换只发生在副本上。
#include <iostream>
void swap(int& a, int& b) {
int t = a; a = b; b = t;
}
int main() {
int x = 3, y = 5;
swap(x, y);
std::cout << x << ' ' << y << '\n'; // 5 3
return 0;
}3.3 多文件与命名空间
答:______________
✅ 查看答案与解析
答案 对
解析:头文件保护,防止重复包含导致重复定义。
答:______________
✅ 查看答案与解析
答案 对
解析:头文件会被复制到很多源文件,等于强迫所有包含它的人都接受 std 的全部名字,容易冲突。
编译期看定义,链接期看声明
编译期看声明,链接期看定义
编译和链接都只看声明
编译和链接都只看定义
答:______________
✅ 查看答案与解析
答案 B
解析:头文件放声明(“有这么个东西”),源文件放定义(“它长这样”)。编译各文件时只需声明,链接时才核对定义。
void foo() { }
void foo() { }
✅ 查看答案与解析
答案 同一个名字在整个程序里只能有一个定义(ODR)。把其中一个改名,或把公共实现放进头文件用 inline 修饰。
解析:inline 函数的定义可以在多个编译单元里重复出现,链接器合并成一个——这是 inline 今天最主要的用途。
提示:g++ -std=c++17 -Wall -Wextra -o app main.cpp util.cpp
✅ 查看答案与解析
答案 参考答案:
解析:头文件加 #pragma once;普通函数声明放头文件、定义放 .cpp;main 只 #include "util.h"。
// util.h
#pragma once
double square(double x);
// util.cpp
#include "util.h"
double square(double x) { return x * x; }
// main.cpp
#include "util.h"
#include <iostream>
int main() {
std::cout << square(3.0) << '\n'; // 9
return 0;
}