💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
1.尽量用const 和inline 而不用#define: 即尽量用编译器,而不是预处理。宏命令导致编译器永远看不到被声明为宏的符号名,而编译器的处理会进行一些错误判断,但预处理不会。 如果出错,调试无法找到宏声明的错误来源,因为这些符号不存在于符号列表中。 宏调用时会出错,如使用自加或自减操作符时。宏应该使用inline 内联函数代替。 在类中可以使用enium来代替宏,如下,在类中声明一个枚举,枚举中设置一些值,就可以当作常量在类的其他地方随意使用了。 ~~~ class A{ public: enum CHECKED { YES = 1,NO = 0}; int a; A(int x,CHECKED = YES){} } ~~~ 2.尽量使用<iostream>而不是<stdio.h> scanf和printf很轻巧高效,但cout<<和cin>>具有类型安全和扩展性。使用<<和>>操作符重载: ~~~ friend ostream& operator<<(ostream& s,const D& d); ~~~ 但是iosteam的有些操作要比C stream的效率低,且可移植性低。 对于c++中是否在头文件后加.h,未加表示库中元素都在std命名空间中,加后表示元素为全局空间的。使用前者会避免名字冲突。 3.尽量使用new和delete 而不用malloc和free。 malloc和free在c中有用,但是无法用于c++中的类与对象,c++中构造函数和析构函数,可以动态的分配内存。 且malloc和free是库函数,而new和delete是操作符。 4.尽量使用c++风格的注释.。 c++风格为行尾注释语法使用//,而c风格的使用/*   ...    */。 5.对应的new和delete 要采用相同的形式。 要删除的是单个对象还是数组,需要告诉delete。出错的结果是不可预测的。 而当使用typedef来定义类型后,new这个类型,也要用相应形式的真正的类型来delete进行删除,如: ~~~ typedef string AddressLines[5]; ~~~ 要释放new的AddressLines对象,要用真正的形式,即delete [] p。 6.析构函数中对指针成员调用delete、 大多数情况下,执行动态内存分配的类都在构造函数中进行new分配内存,而在析构函数中使用delete来释放内存。 而当程序不断维护升级后,在其他成员函数中会不断的添加新的指针,所以一定要在析构函数中都进行删除。 指针要初始化,不然会在析构时出错。而删除空指针是安全的,因为它什么也没做。