音视频编解码-2

本文概述了新入职者在前四天的学习经历,重点讲述了C++编码规范中的命名约定,如文件命名、类与结构体、枚举、函数和常量命名,以及头文件管理和类的构造原则。

入职计划&&每日总结



入职第二天(8.2)

昨日巩固

  1. 工作电脑,开发环境和Jira账号准备OK。
  2. 熟悉公司大致业务方向、三大产品线业务方向。
  3. 了解视频产品线组织架构。

基础课程

  1. 视频产品业务和专业术语培训
    第一节课看不清也听不明白,有点难受,大致了解视频产品业务的方向,对产品线的组织架构也有所了解。
  2. 租赁产品介绍
    租赁产品占据产品线相关业务的一部分,对租赁和固装有更深的认识。
  3. 视频切换功能讲解+实操演示

现代C++编码规范

1.命名约定

  1. 文件命名
main.cpp
  1. 类与结构体
class UrlTable {};
//不管是静态的还是非静态的,类数据成员前面加下划线
struct Pool {};
class Tableinfo 
{
private:
	std::string _tableName;
	static Pool* _pool;//下划线
};
struct UrlTables {};
struct UrlTableProperties
{
    std::string name;
    int numEntries;
    static Pool* pool;//无下划
};
  1. 引用(别名)
using PropertiesMap = std::map<std::string, UrlTables*>;
  1. 枚举
enum class UrlTableErrors {};//大驼峰(首字母大写)
enum CoLorSet { Red, Blue, White, Black }; //小驼峰(eg:redBlue) 定义枚举类型
enum Week { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; // 定义枚举类型week
  1. 函数命名
bool addTableEntry();//小驼峰
  1. 常量命名
const int MAX_NUM1 = 100;
constexpr int MAX_NUM2 = 200;
  1. 全局变量
int g_Count = 0;//尽量少用,有构造函数的类不能作为全局变量
  1. 命名空间
//using namespace std;
namespace zhang{}//张公子的命名空间
//顶级命名空间的名称应当是项目名或者是该命名空间中的代码所属的团队的名字。【建议】
//命名空间中的代码, 应当存放于和命名空间的名字匹配的文件夹或其子文件夹中。【建议】
//命名空间结尾的}后面应该加注释。
  1. 常见缩写
table-- > tbl
argument-- > arg
buffer-- > buf
clock-- > clk
command-- > cmd
config-- > cfg
device-- > dev
error-- > err
message-- > msg
maximum-- > max
minimum-- > min
parameter-- > para
previous-- > prev
register -- > reg
statistic-- > stat
initialize-- > init
synchronize-- > sync
communication-- > comm
internationalization-- >i18n 

入职第三天(8.3)

2.头文件

  • 头文件应该自包含
  • 头文件包含顺序
    1. 源文件同名.h文件
    2. 本项目定义的其他头文件
    3. 系统头文件
    4. 引用的库文件
  • eg:
#include "ncpcore.h"       // 优先位置
#include "ncp/ncpplugin.h" // 本项目头文件
#include <sys/types.h> // 系统头文件
#include <unistd.h>
#include <hash_map>    // 库头文件
  • 尽可能减少包含的头文件
  • 不可重复包含
  • 不在头文件公开using namespace:以前练习最常用:using namespace std;

3.类

  • 不能在构造函数和析构函数中调用虚函数:先构造基类,调用子类虚函数时子类部分数据成员还没初始化,不安全。先析构子类,再析构基类的时候对象已经被销毁了,没有意义。
  • 不能在构造函数中执行可能失败的操作。
  • 不使用的构造函数要明确的删除 =delete。
  • 直接使用编译器生成构造函数要显式的声明 =default。
  • 不想被用于隐式类型转换的单参数构造函数,用 explicit 明确的拒绝。

1.结构体

  • struct与class 语义几乎相同,区别是结构体默认是 public 。
  • 尽量用类
  • 定义成员变量时就初始化

2.访问级别

  • 所有数据成员声明为private或protected

3.成员函数

成员函数后面加const,不仅语义更清晰,而且函数可以被常量对象 const T& 调用。

4.函数

  • 函数长度不能超过 50 行
  • 内置类型,采用值传递
  • 类对象,采用引用传递(const T &)
  • 数组对象,采用容器(std::array & 或 std::vector&等)进行传递
  • 参数个数不能过多,一般不超过5个
  • 慎用函数重载
  • 在指针被初次传入(通常是接口函数),或者初次生成的地方(内存申请时)检查指针
  • 对于函数中临时存在的对象或数组,尽量在栈中创建
  • 尽早退出函数
  • 代码块嵌套一般不超过4层

5.宏规范

  • 禁止宏定义常量,应该用const、constexpr
  • 不要为了提高性能而使用函数式宏:#define sqr(x) ((x) * (x))
  • 使用函数宏,对所有的宏参数加上括号()保护
  • nullptr代替NULL

入职第四天(8.4)

6.智能指针

详见:

7.容器

详见:

8.多线程

  • 尽量减少线程的使用
  • 不要频繁创建和销毁线程
  • 使用锁时要防止死锁

9.注释

  • 头文件注释:版权信息和其他重要信息
  • 不在文件头中增加作者信息
  • 不在文件头中增加修改记录
  • 不要加无用的注释
  • 较长的代码块结尾加注释

10.风格

  • using代替typedef
  • 使用auto接收返回值
  • 使用范围for:
std::vector<int> vec;
	for (int i = 1; i < 5; ++i)
	{
		vec.push_back(i);
	}
	for (const auto& p : vec)
	{
		std::cout << p;
	}
  • 不抛出异常

11.最佳实践

  • 尽量缩小符号存在的名字空间和生命周期
  • 不要重复造轮子
  • 使用printf风格的打印语句
  • 在循环中慎用无符号整数\
  • 使用标志变量是坏代码的表现:
bool hasDog = false //坏代码

12.大五原则

当一个类实现了以下五项之一时,也应该实现其他四项:

  1. 析构函数
  2. 拷贝构造函数
  3. 赋值运算符
  4. 移动构造函数
  5. 移动赋值运算符
Matlab基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率内容概要:本文围绕Matlab在电力系统优化与控制领域的应用展开,重点介绍了基于粒子群优化算法(PSO)和鲁棒MPPT控制器提升光伏并网效率的技术方案。通过Matlab代码实现,结合智能优化算法与先进控制策略,对光伏发电系统的最大功率点跟踪进行优化,有效提高了系统在不同光照条件下的能量转换效率和并网稳定性。同时,文档还涵盖了多种电力系统应用场景,如微电网调度、储能配置、鲁棒控制等,展示了Matlab在科研复现与工程仿真中的强大能力。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事新能源系统开发的工程师;尤其适合关注光伏并网技术、智能优化算法应用与MPPT控制策略研究的专业人士。; 使用场景及目标:①利用粒子群算法优化光伏系统MPPT控制器参数,提升动态响应速度与稳态精度;②研究鲁棒控制策略在光伏并网系统中的抗干扰能力;③复现已发表的高水平论文(如EI、SCI)中的仿真案例,支撑科研项目与学术写作。; 阅读建议:建议结合文中提供的Matlab代码与Simulink模型进行实践操作,重点关注算法实现细节与系统参数设置,同时参考链接中的完整资源下载以获取更多复现实例,加深对优化算法与控制系统设计的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明教张公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值