vector 的 size、capacity、reserve 和 resize 有什么区别?
size 是已构造元素数,capacity 是当前无需重新分配可容纳的数量;reserve 只保证容量下限,不创建元素;resize 改变元素数并可能构造、销毁或触发扩容。扩容会使指针、引用和迭代器失效。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
size 是已构造元素数,capacity 是当前无需重新分配可容纳的数量;reserve 只保证容量下限,不创建元素;resize 改变元素数并可能构造、销毁或触发扩容。扩容会使指针、引用和迭代器失效。
预处理展开宏和条件编译,编译把翻译单元生成汇编或中间表示,汇编产生含符号与重定位的目标文件,链接解析跨文件符号并按脚本布局,最后可转换成 bin/hex 等烧录格式。
优化器可假设不兼容类型的指针通常不会指向同一对象;违反有效类型和别名规则后,读写可能被重排、缓存或删除。字节观察可通过 character type,位级转换优先用 memcpy,而不是随意强转指针。
枚举的兼容整数类型和大小受语言规则、取值范围及实现选项影响,ABI 或编译参数变化可能改变布局。协议和 Flash 格式应使用明确宽度整数,并显式校验值是否属于合法枚举集合。
对象构造和析构期间只把当前已构造层视为有效,虚调用不会分派到尚未构造或已经析构的派生部分。若基类构造依赖派生覆盖逻辑,容易得到错误状态;纯虚调用还可能直接失败。
先保留可复现构建与符号,比较编译参数、链接脚本和内存布局;优先查未初始化变量、越界、数据竞争、未定义行为、时序变化及缺失 volatile/屏障,而不是直接永久关闭优化。