搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 码出名企路 > C++编程规范(四)

C++编程规范(四)

码出名企路 2020-08-02

推荐阅读:





1, 在头文件中,不要编写名字空间级的using指令或者using声明,相反应该显式用名字空间限定所有的名字。

Namespace A{//1Int f(double);}Namespace B{//2 Using A::f;Void g();} Namespace A{//3Int f(int);} Void B::g(){//4 f(1);//调用的是哪个重载呢?}

假设1,2,3分别位于三个不同的头文件s1.h,s2.g和s3.h中,而4实现在s4.cpp中,s4.cpp包含了那三个头文件以导入相关的声明。B::g的语义将取决于s4.cpp中所包含的头文件的顺序,具体如下:

如果s3.hs2.h之前,则B::g将调用A::f(int);否则如果s1.hs2.h之前,则B::g将调用A::f(double);否则B::g就完全无法编译。

 

2,要避免在不同的模块中分配是释放内存。

在一个模块中分配内存,而在另一个模块中释放它,会在这两个模块之间产生微妙的远距离依赖,使程序变得脆弱。

 

3,  不要在头文件中定义具有链接的实体

//避免在头文件中这样定义Int f;String hello(“hello world”);Void foo();

原因:当在每一个cpp中,都会定义以上函数体,并分配空间。当要将他们都链接起来的时候,链接器将面对多个具有相同名字而且互相在竞争可见性的符号。

解决:只在头文件中放置声明就好

Extern int f;Extern string hello;Void foo();//“extern”对函数声明而言是可有可无的

而实际的定义则放在一个单独的实现文件中:

Int f;String hello(“hello world”);Void foo(){}

 

同样,不要在头文件中定义名字空间级的static实体。

//避免在头文件中定义具有静态链接的实体Static int f;Static string hello(“hello world”);Static void foo(){}

 

原因:如果在头文件中定义了静态数据和静态函数,而该头文件又要被50个文件包含,那么函数体和数据所占用的空间会在最终的可执行文件中重复50次。

 

例外:以下具有外部链接的实体可放入头文件中:

内敛函数函数模板类模板的静态数据成员函数

 

4, 不要无意地编写不通用的代码,尝试替换

使用 != 代替 < 对迭代器进行比较使用 empty() 代替 size() == 0使用层次结构中最高层的类提供需要的功能编写 const& 为参数的调用代码

 

5,异常处理通过值抛出,通过引用捕获

当重新抛出相同的异常时,应该优先使用throw,避免使用 throwe;避免抛出指针,如果抛出指针,就需要处理内存。

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《C++编程规范(四)》的版权归原作者「码出名企路」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注码出名企路微信公众号

码出名企路微信公众号:YYLi_CV

码出名企路

手机扫描上方二维码即可关注码出名企路微信公众号

码出名企路最新文章

精品公众号随机推荐