与“c++”相关的TAG标签
priority_queue默认是大根堆,要小根堆需显式指定容器和比较器:priority_queuepq;自定义排序须用仿函数类,operator()返回true表示a优先级低于b。
类是编译器识别的内存布局规则与函数绑定约定,本质为结构体加vtable语法糖;空类sizeof为1,含虚函数则至少8字节;对象内存位置决定生命周期,this是隐式传入的常量指针。
C++引用在内存中通常不单独占空间,编译器将其优化为原变量别名;仅当需持久化存储(如类成员、全局引用、lambda捕获)时,才隐式使用指针占用内存。
std::stoi转hex最简单但需指定base=16或0,支持大小写和"0x"前缀;非法字符抛异常,尾部垃圾被忽略;超int范围须用std::stoul/stoull,严格校验需std::strtol配合endptr。
结构体对齐由编译器和平台决定,C++标准仅规定成员声明顺序与地址递增,对齐方式为实现定义;需用offsetof、sizeof和static_assert验证,重排成员可减少填充但不能消除末尾填充,alignas可显式指定对齐而#pragmapack会破坏对齐。
typedef易错因语法反直觉:先写类型再写别名,但类型可含指针、数组、函数签名等修饰,导致声明形似变量定义;using语法更直观且支持模板别名,是泛化场景唯一选择。
Go的cgo机制默认仅自动编译包根目录下的C/C++源文件,不支持通过//go:cgo_伪指令直接递归或显式引入子目录中的C文件;若需组织C代码到子目录,必须借助外部构建流程或重构为独立包并导出Go接口。
C++中无法用std::ofstream创建文件夹,因其仅处理文件读写;创建目录须调用系统API:Windows用CreateDirectory,Linux/macOS用mkdir,或跨平台使用C++17的std::filesystem::create_directories。
reserve不改变size只影响capacity,它预先分配至少指定大小的内存但不构造元素,因此size不变而capacity请求值,错误访问未构造位置会导致未定义行为。
noexcept能在特定场景下提升性能,但仅当编译器确信调用链全为noexcept且可跳过异常处理机制时才生效;它影响函数类型、重载决议和trait判断,误用会导致崩溃或编译失败。
