《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。
前后端面试题-专栏总目录
文章目录
- 一、本文面试题目录
-
-
- 21. 什么是C++中的默认参数?使用时需要注意什么?
- 22. 解释C++中的`volatile`关键字的作用。
- 23. 什么是C++中的函数模板特化?
- 24. 解释C++中的`noexcept`说明符。
- 25. 什么是C++中的委托构造函数?
- 26. 解释C++中的`override`和`final`说明符。
- 27. 什么是C++中的拷贝赋值运算符和移动赋值运算符?
- 28. 解释C++中的`constexpr`关键字。
- 29. 什么是C++中的位域(Bit Fields)?
- 30. 解释C++中的`using`声明和`using`指令的区别。
-
- 二、100道面试题目录列表
一、本文面试题目录
21. 什么是C++中的默认参数?使用时需要注意什么?
答案: 默认参数允许函数在调用时省略部分参数,编译器会自动使用预先定义的值。默认参数必须从右向左连续定义,且在函数声明或定义中只能出现一次。
示例代码:
// 正确:默认参数从右向左连续定义
void func(int a, int b = 2, int c = 3) { /* … */ }
// 错误:默认参数不连续
// void func(int a = 1, int b, int c = 3) { /* … */ }
int main() {
func(10); // 等价于func(10, 2, 3)
func(10, 20); // 等价于func(10, 20, 3)
}
22. 解释C++中的volatile关键字的作用。
答案: volatile告诉编译器该变量可能被意外修改(如硬件、多线程环境),禁止编译器对其进行优化。常用于:
示例代码:
volatile int sensorValue; // 告诉编译器不要缓存该变量的值
void interruptHandler() {
sensorValue = readSensor(); // 硬件可能随时修改该值
}
int main() {
while (sensorValue < 100) { // 每次都从内存读取,不使用寄存器缓存
// …
}
}
23. 什么是C++中的函数模板特化?
答案: 函数模板特化允许为特定类型提供自定义实现,覆盖通用模板的行为。
示例代码:
// 通用模板
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
// 特化版本(针对const char*)
template <>
const char* max<const char*>(const char* a, const char* b) {
return (strcmp(a, b) > 0) ? a : b;
}
int main() {
int x = max(1, 2); // 使用通用模板
const char* str = max("abc", "def"); // 使用特化版本
}
24. 解释C++中的noexcept说明符。
答案: noexcept用于声明函数不会抛出异常,帮助编译器优化代码。有两种形式:
示例代码:
void func() noexcept { // 声明不会抛出异常
// …
}
// 移动构造函数通常标记为noexcept以允许容器优化
class MyClass {
public:
MyClass(MyClass&& other) noexcept { /* … */ }
};
25. 什么是C++中的委托构造函数?
答案: 委托构造函数允许一个构造函数调用同一个类的其他构造函数,避免代码重复。
示例代码:
class MyClass {
private:
int x, y;
public:
// 主构造函数
MyClass(int a, int b) : x(a), y(b) {}
// 委托构造函数
MyClass(int a) : MyClass(a, 0) {} // 调用另一个构造函数
// 另一个委托构造函数
MyClass() : MyClass(0, 0) {}
};
0 | 地图渲染基础- 【WebGL 教程】 – 【Canvas 教程】 – 【SVG 教程】 |
1 | Openlayers 【入门教程】 – 【源代码+示例 300+】 |
2 | Leaflet 【入门教程】 – 【源代码+图文示例 150+】 |
3 | MapboxGL【入门教程】 – 【源代码+图文示例150+】 |
4 | Cesium 【入门教程】 – 【源代码+综合教程 200+】 |
5 | threejs【中文API】 – 【源代码+图文示例200+】 |
6 | Shader 编程 【图文示例 100+】 |
26. 解释C++中的override和final说明符。
答案:
- override:显式声明函数重写基类的虚函数,提高代码可读性并防止意外错误。
- final:禁止函数被重写或类被继承。
示例代码:
class Base {
public:
virtual void func() {}
};
class Derived : public Base {
public:
void func() override final { /* … */ } // 重写并禁止进一步重写
};
// 错误:无法继承final类
// class FurtherDerived : public Derived {};
27. 什么是C++中的拷贝赋值运算符和移动赋值运算符?
答案:
- 拷贝赋值运算符:通过复制已有对象的值来赋值,原型为T& operator=(const T&)。
- 移动赋值运算符:通过转移临时对象的资源来赋值,原型为T& operator=(T&&)。
示例代码:
class MyClass {
private:
int* data;
public:
// 拷贝赋值运算符
MyClass& operator=(const MyClass& other) {
if (this != &other) {
delete[] data;
data = new int[*other.data];
*data = *other.data;
}
return *this;
}
// 移动赋值运算符
MyClass& operator=(MyClass&& other) noexcept {
if (this != &other) {
delete[] data;
data = other.data;
other.data = nullptr;
}
return *this;
}
};
28. 解释C++中的constexpr关键字。
答案: constexpr用于声明编译期常量表达式,允许在编译时计算值,提高性能。可修饰:
示例代码:
constexpr int square(int x) {
return x * x;
}
int main() {
constexpr int a = square(5); // 编译时计算
int arr[a]; // 合法:a是编译期常量
}
29. 什么是C++中的位域(Bit Fields)?
答案: 位域允许在结构体或类中按位分配内存,用于节省空间,特别是在嵌入式系统中。
示例代码:
struct Flags {
unsigned int isEnabled : 1; // 1位
unsigned int isVisible : 1; // 1位
unsigned int priority : 3; // 3位(取值范围0-7)
};
int main() {
Flags flags;
flags.isEnabled = 1;
flags.priority = 5; // 合法
// flags.priority = 10; // 错误:超出范围
}
30. 解释C++中的using声明和using指令的区别。
答案:
- using声明:引入特定命名空间成员到当前作用域。
- using指令:引入整个命名空间到当前作用域。
示例代码:
namespace Math {
int add(int a, int b);
int sub(int a, int b);
}
// using声明
void func() {
using Math::add; // 只引入add
add(1, 2); // 直接使用add
// sub(3, 4); // 错误:sub未被引入
}
// using指令
void func2() {
using namespace Math; // 引入整个命名空间
add(1, 2); // 可用
sub(3, 4); // 可用
}
二、100道面试题目录列表
1 | C++面试题及详细答案100道(01-10) |
2 | C++面试题及详细答案100道(11-20) |
3 | C++面试题及详细答案100道(21-30) |
4 | C++面试题及详细答案100道(31-40) |
5 | C++面试题及详细答案100道(41-50) |
6 | C++面试题及详细答案100道(51-60) |
7 | C++面试题及详细答案100道(61-70) |
8 | C++面试题及详细答案100道(71-80) |
9 | C++面试题及详细答案100道(81-90) |
10 | C++面试题及详细答案100道(91-100) |
评论前必须登录!
注册