C++进阶知识3.0

@bit::Shadow
✧(≖ ◡ ≖✿

目录

C++进阶知识3.0

set与map的封装中仿函数的使用

typename在myset中于Iterator的已经验证声明

[&ch = 'a'](#&ch = 'a')

[kill -9与Ctrl+C的区别](#kill -9与Ctrl+C的区别)

constexpr

const与define数据段区别

"失败返回-1错误码errno被设置"

typeid().name()

系统与用户命名区分

[volatile mutable](#volatile mutable)


C++进阶知识3.0

std::initializer_list 的使用:

cpp 复制代码
//使用initailizer_list
set<string> v = {"klmn", "opqrst", "lalala"};
//
vector<int> v({1,2,3,4}); 

set与map的封装中仿函数的使用

typename在myset中于Iterator的已经验证声明

在非有序情况下相比于set建议都使用unordered_set;

在不同作用域的相同变量名不会冲突!即使先前已经定义

&ch = 'a'

在 C++ 中,cout 对于 char* 类型(字符指针)有特殊的重载。它不会打印指针的数值 (地址),而是会把它当作C风格字符串的起始地址 ,然后逐个打印字符直到遇到 \0

解决办法:(void*)&ch = 'a'

kill -9与Ctrl+C的区别

kill -9是急迫性强,可能导致资源泄露。

Ctrl+C柔和型终止进程,进程资源分析回收。

constexpr

明确此变量在编译阶段就可以得出值

cpp 复制代码
int n;
std::cin >> n;
const int c1 = n;        // ✅ 编译通过,运行时常量
constexpr int c2 = n;    // ❌ 编译错误,n 不是编译期已知

const与define数据段区别

原则:

使用define配置复读数1.653"使用常量可能比使用define导致较小量的码因为预处理器'盲目的将宏替换为1.653'可能导致目标码(object code)出现多份1.653,但若用常量绝不会出现这类情况"。

怎么理解"替换导致的目标码出现多份1.653"?

前者数据段拷贝多份一样的1.653 ,后者使用const常量是"引用方式"大大缩减了消耗。

"失败返回-1错误码errno被设置"

cpp 复制代码
#include <errno.h>
#include <string.h>   // strerror
#include <stdio.h>    // perror

int fd = open("noexist.txt", O_RDONLY);
if (fd == -1)
{
    // 方式1:直接看错误码数字
    std::cout << errno << std::endl;         // 2

    // 方式2:转成可读字符串
    std::cout << strerror(errno) << std::endl;  // No such file or directory

    // 方式3:最简便(自动读 errno)
    perror("open failed");    // open failed: No such file or directory
}

typeid().name()

输出真实类型(不被无序列表typedef包装)

  • typeid(ssize_t).name() // 输出l 意为 long int
  • typeid(sighandler_t).name() // 输出PFviE 指针 函数void int End(标志结束)
  • std::cout << typeid(sigset_t).name() << std::endl; // 输出 10__sigset_t 意为10个字符长度的__sigset_t类型。

系统与用户命名区分

内核查找发现仅存在__sighandler_t,这是用于区分用户端系统端 层面。

同样的sigset_t在系统层面也是__sigset_t。

volatile mutable

volatile 来自拉丁语volatilis 意为可变的,易变的。

作用:拒绝编译器过度优化造成的非常性变量变作类似的宏替换 / 寄存器直接存储访问。

mutable 来自拉丁语mutabilis 易变的,可变的。

作用--const处理:在非const修饰的成员下加以mutable修饰使得在使用时,此变量即使在一些const限定禁止修改的情景下授权修改。

感谢支持,持续更新

欢迎关注

相关推荐
FoldWinCard2 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
星栈独行3 小时前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
2601_954526753 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
qq_448011163 小时前
C语言中的变量和函数的定义与声明
android·c语言·开发语言
kirs_ur3 小时前
SSD 在 AI 训练中的角色
大数据·服务器·人工智能
code_pgf4 小时前
`unordered_map` 详解
c++
零涂毕业设计4 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud1234 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质4 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
kirs_ur4 小时前
CXL(Compute Express Link)— 内存扩展的未来
服务器·数据库·性能优化