来自:碧波
一、C++语法基础
11. 函数参数传递时,指针、引用以及值传递有什么区别?
参数传递区别
值传递:复制实参的值给形参,函数内部操作的是副本,不影响原始值。
引用传递:形参是原始实参的别名,函数内部操作影响原始值。
指针传递:形参是原始实参的地址,函数内部通过解引用操作影响原始值。
12. 进程间的通信方式有那些?
各种通信方式的详细介绍,参加 线程进程以及多线程多进程
管道
命名管道
消息队列
共享内存
信号量
套接字
13. 线程间的通信方式有那些?
各种通信方式的详细介绍,参加 线程进程以及多线程多进程
共享内存
互斥锁
条件变量
顺便吆喝一声,技术大厂,前后端测试捞人,近三周条件放宽,来看看!>>> 机会
14. 简单谈谈对线程的理解,线程间共享资源时该怎么处理?
线程的详细介绍,参加 线程进程以及多线程多进程
线程(Thread)是操作系统调度的基本单位,是进程内的一条执行路径,每个进程至少包含一个线程。
线程间共享资源时,需要注意数据的一致性和并发访问的安全性,避免数据竞争和不可预料的结果。一般会采用 互斥锁 来避免多线程访问导致的资源调用错误。
15. 常用关键字含义及其使用
static:关键字在不同上下文中有不同含义,主要用于:
静态变量:属于类或函数的静态存储区域,生命周期延续到程序结束。
静态函数:属于类的静态成员函数,与类的实例无关,可以直接通过类名访问。
const :用来声明常量。
常量变量:一旦初始化就不能修改的变量。
常量成员函数:在成员函数声明或定义中的 const 关键字表示该函数不会修改对象的状态。
sizeof: 是一个操作符,用于计算数据类型或变量的字节大小。
sizeof(type):返回类型或变量 type 所占的字节数。
例如:sizeof(int) 返回 int 类型的字节数,在大多数系统中是4个字节。
final:用于指示某个类、虚函数或者虚继承在派生时不可被继承或重写。
类:final class MyClass final { ... };,表示该类不能被继承。
虚函数:virtual void myFunc() final;,表示该虚函数在子类中不能被重写。
override:是C++11引入的关键字,用于 显式指示函数 是在派生类中覆盖了基类中的虚函数。
在派生类中重写基类的虚函数时,可以使用 override 关键字,以确保正确性和可读性。
virtual: 用于声明虚函数,即在基类中声明的函数,可以在派生类中被重写(override)
在基类中声明虚函数:virtual void foo();
派生类中可以选择重写基类的虚函数:void foo() override;
虚函数支持动态绑定,即在运行时根据对象的实际类型决定调用哪个版本的函数。
volatile: 用来声明一个变量是易变的,可能会被意外修改,通常用于多线程或者硬件相关的编程。
如:volatile int sensorValue;,告诉编译器不要对 sensorValue 进行优化,因为它可能会在程序控制之外被改变。
explicit:用来声明构造函数为显式构造函数,防止隐式类型转换。
例如:explicit MyClass(int value);,禁止编译器根据上下文进行隐式转换,必须显式调用构造函数。
inline:声明可以用于 函数定义 或者 成员函数 定义,建议编译器将 函数的代码插入到每个调用点处,而不是通过函数调用的方式进行调用。
如:inline int add(int a, int b) { return a + b; }
extern C 的作用
用于告诉编译器按照C语言的方式进行链接,主要用于解决C++代码和C代码混合编译的问题。
define 和 typedef 的区别
define: 用于定义宏,预处理阶段替换源代码中的标识符;
如:#define PI 3.14159
typedef : 用于给数据类型取别名。后续可以直接使用别名进行声明变量。
如:typedef unsigned int UINT; UINT num; // 等价于unsigned int num。
|