C++基础知识(三)

断言 VS 静态断言

特性断言 (assert)静态断言 (static_assert)
检查时间运行时编译时
使用场景检查运行时假设和不变性验证编译时条件
影响条件不成立时终止程序条件不成立时引发编译错误
性能在非调试模式下可关闭,以提高性能不影响运行时性能
错误消息提供错误信息并终止程序编译时错误信息
初始化要求需要包含 <cassert>C++11 引入,无需额外头文件
语法assert(condition);static_assert(condition, "Error message");

nullptr VS NULL VS 0

特性nullptrNULL0
定义空指针常量宏(通常为 0((void*)0)整数常量
类型std::nullptr_t整数型(在上下文中被视为指针)整数型(在上下文中被视为指针)
类型安全提供良好的类型安全存在类型不明确的问题存在类型不明确的问题
可读性提供明确的语义可能引起误解可能引起误解
C++11 引入
例子int* p = nullptr;int* p = NULL;int* p = 0;

初始化方式对比

初始化方式语法示例适用对象特点与说明引入版本
默认初始化int x;基本类型、类类型局部变量未定义,静态变量初始化为零。C++98
列表初始化int a{5};所有类型防止窄化转换,清晰表达初始化意图。C++11
拷贝初始化int b = x;所有支持赋值的类型使用 = 进行初始化,可能引入不必要的拷贝。C++98
直接初始化std::string str("Hello");对象类型直接调用构造函数进行初始化,适合类的资源管理。C++98
统一初始化int c = {10};所有类型使用花括号,通过一种方式初始化,更安全、简洁。C++11

常见的调用惯例

调用惯例描述参数传递堆栈清理支持可变参数适用场景
cdecl默认的 C 调用惯例右到左调用者一般 C 函数,包括可变参数函数
stdcallWindows API 函数调用右到左被调用者Windows API,例如 GUI 组件
fastcall高效调用,寄存器传递参数部分寄存器调用者性能敏感的函数,游戏编程
thiscallC++ 非静态成员函数调用this 为寄存器调用者C++ 对象方法
vectorcallSIMD 和浮点参数的高效调用多寄存器调用者高性能计算,例如图形处理
pascalPascal 语言的调用惯例左到右被调用者与 Pascal 语言库交互
regcall特定寄存器用于参数传递寄存器调用者高度优化的函数,嵌入式系统等

mmap 第 4 个参数(flags)汇总表

标志描述适用场景
MAP_SHARED创建共享映射,对映射区域的写操作会影响原始文件多个进程需要读写同一文件或共享数据
MAP_PRIVATE创建私有映射,对映射区域的写操作不会影响原始文件进程需要对文件进行临时修改,且不希望影响其他进程
MAP_ANONYMOUS创建匿名映射,与任何文件无关,文件描述符必须为 -1用于进程间共享内存或分配动态内存
MAP_FIXED映射至指定地址,如果该地址已被占用,将导致 mmap 失败需要精确控制内存布局,如系统编程或操作系统开发
MAP_NORESERVE不保证内存保留,不为未使用页面预留内存用于优化内存使用情况,减少内存预留
MAP_POPULATE预先填充映射的物理内存页面,尽量将所有映射的页面加载到物理内存中提高性能,特别是在未来将频繁访问某些区域的情况下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐怡旸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值