与“c++”相关的TAG标签
拷贝构造函数仅在四种明确时机被调用:①显式或复制初始化新对象(如Aa(b)或Aa=b);②值传递参数;③返回局部对象(未被RVO优化时);④抛出或按值捕获异常。
noexcept能在特定场景下提升性能,但仅当编译器确信调用链全为noexcept且可跳过异常处理机制时才生效;它影响函数类型、重载决议和trait判断,误用会导致崩溃或编译失败。
std::unique_ptr不可复制只能移动,拷贝构造和赋值被删除;移交所有权需用std::move()标记为右值,此后源变为空,目标获得资源;函数传参或返回时应合理使用move,避免二次move等逻辑错误。
std::optional明确表示“有值或无值”,用std::nullopt标识无值,不可用nullptr或零值模拟;须用has_value()或bool转换判断,直接解引用未检查对象将导致UB。
priority_queue默认是大根堆,要小根堆需显式指定容器和比较器:priority_queuepq;自定义排序须用仿函数类,operator()返回true表示a优先级低于b。
最安全常用的是char减‘0’,因‘0’–‘9’的ASCII值连续,c-‘0’实现语义转换;直接赋值或static_cast得到的是ASCII码而非数字值;需先判断c是否在‘0’–‘9’范围内以防非法输入。
struct成员默认public,class默认private;struct继承默认public,class默认private;struct倾向POD类型和C兼容,class强调封装与资源管理。
std::to_string仅支持int、long、longlong及对应unsigned类型,不支持short和char;需显式转换且无格式控制功能。
结构体对齐由编译器和平台决定,C++标准仅规定成员声明顺序与地址递增,对齐方式为实现定义;需用offsetof、sizeof和static_assert验证,重排成员可减少填充但不能消除末尾填充,alignas可显式指定对齐而#pragmapack会破坏对齐。
typedef易错因语法反直觉:先写类型再写别名,但类型可含指针、数组、函数签名等修饰,导致声明形似变量定义;using语法更直观且支持模板别名,是泛化场景唯一选择。
