c++ 技巧

代码意图要直观

int month();   没有表示是否会修改日期对象 也没表示 返回的是一个月份
Month month() const;  建议这样做

int index = -1;
for (int i=0; i<v.size(); ++i)
{
    if(v[i]==val)
    {
        index = i;
        break;
    }
}
// 不需要手动管理索引 显示使用for 说明对STL 不了解
auto it  = std::find(begin(v),end(v),val);

尽可能用iso标准写c++代码

尽可能地使用 C++ 标准库提供的功能,而不是依赖特定于编译器的扩展或非标准库
写的代码不要是 micsoft 编译器独占的语法

理想情况下程序应该是静态类型安全的

for (const auto& v: vec){...}  表明了不会修改 容器vec 的元素
for (auto& v: vec){...}  不清楚  不清楚是否要修改 容器vec 的元素
std::for_each(std::execution::par,vec,[](auto v){...}) 并行遍历容器,对每个元素执行操作(按值传递),不会修改容器元素
// c++17 中可以用std::variant 安全替代联合体
基于模板的泛型代码减少了转型的需要,因此,也减少了类型错误
c数组调用一个函数时,会发生数组退化, c++20 开始 使用std::span 自动推算c数组的大小,旧版本可以使用Guidelines支持库GSL 提供的实现
窄化转换
int i1(3.14);
用{} 告诉编译器
int i1{3.14}

编译器检查 优先于 运行期检查

static_assert() 编译期间断言
模板参数的类型
常量表达式是否符合预期条件
编译阶段检查某些配置是否正确
编译时的策略选择

不能在编译期间检查的事项 应该在运行期间检查

dynamic_cast

尽早识破运行期间错误

管理好指针和c数组
转换 也需要检查,尽量避免转换

不要泄漏任何资源

内存 文件 套接字
处理方法是RAII 资源获取即初始化
锁负责处理互斥量 智能指针 负责处理原始内存 STL 容器负责处理底层元素

不要浪费时间和空间

追求效率的另一个好处是,这个过程迫使你更深入地了解问题
std::transform 简化 for 循环 同时不会出现越界

优先选择不可变数据,而不是可变数据

推理常量比推理变量更容易。
不可变在并发场景下非常好用,常量不会发生数据竞争。

封装杂乱的代码

杂乱的代码容易出错
应该封装到 数据类型或方法中

适当地使用支持库

c++标准库
CoreGuidelines库
boost库

类似这样代码 文档齐全的库

c++

函数参数传参定义规范

2023-8-8 11:18:57

c++

头文件 重复包含宏处理

2024-8-19 7:45:58

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索