当前位置: 首页 > news >正文

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预先填充映射的物理内存页面,尽量将所有映射的页面加载到物理内存中提高性能,特别是在未来将频繁访问某些区域的情况下

http://www.mrgr.cn/news/12343.html

相关文章:

  • 第一次运行Neo4J
  • 力扣455-分发饼干(java题解)
  • 深度学习100问8-什么是PTB语料库
  • 标准UEFI Shell命令
  • 腾讯开源突破技术:V-Express引领人像照片视频化新潮流
  • 网络优化4|网络流问题|路径规划问题|车辆路径问题
  • 汽车功能安全--TC3xx LBIST触发时机讨论
  • 网络编程(学习)2024.8.27
  • 模拟实现string
  • 解锁2024音乐新玩法!3款剪辑神器在手,专属BGM创作从此不再难!
  • 【IC设计】跨时钟异步处理系列——单比特跨时钟
  • 如何使用Hive构建高校考试分析系统:大数据技术在教育领域的应用
  • 核心数据加密的实现方式
  • 心觉:赚钱是修行最快的一种方式
  • BAT32G137国产项目通用第四节:FreeRTOS MCU负载率
  • 算法刷题日志
  • CentOS7 多硬盘合成卷组并创建LVM,挂载到同一目录下
  • 2024年8月20日~2024年8月26日周报
  • bash: /home/xxx/anaconda3/bin/conda: No such file or directory
  • 在技术风暴中站稳脚跟之开发团队应对突发技术故障的策略与提升路径