编写高质量代码之改善C++程序语法篇2<从C到C++需要做的改变>
来源:互联网 发布:ubuntu chrome火狐 编辑:程序博客网 时间:2024/05/21 10:40
偶然发现网络读书频道,http://book.51cto.com/art/201202/317549.htm,挺不错的希望CSDN也有,可能已经有了。。。
阅读《编写高质量代码--改善C++程序的150个建议》,总结归纳;
此文用以加深记忆,督促学习的目的
0 在C++中如何使用C的代码
如:int func( int a, char b);
c编译函数时不带函数的类型信息,上面的函数被编译成类似_Func的符号
c++为了实现重载,在编译时会加上函数的参数类型,上面的函数会被编译成类似_Func_int_char这样的符号
为了解决上面的矛盾,可以采取以下3中方式:
1) 修改C代码的头文件,当其中含有C++代码时,在声明中加入extern "C"
/*C语言头文件: CDemo.h*/#ifndef C_SRC_DEMO_H#define C_SRC_DEMO_Hextern "C" int Func(int x,int y);#endif/*C实现文件:CDemo.c*/#include " CDemo.h "int Func(int x,int y ){ ......}//C++中调用#include " CDemo.h "int main(){ Func(1,6); return 0;}2) 在C++代码中重新声明以下C函数,在重新声明时添加上extern "C"
/*C语言头文件: CDemo.h*/#ifndef C_SRC_DEMO_H#define C_SRC_DEMO_Hextern int Func(int x,int y);#endif/*C实现文件:CDemo.c*/#include " CDemo.h "int Func(int x,int y ){ ......}//C++中调用#include " CDemo.h "extern "C" int Func(int x,int y);int main(){ Func(1,6); return 0;}3) 在包含C头文件时,添加extern "C"
/*C语言头文件: CDemo.h*/#ifndef C_SRC_DEMO_H#define C_SRC_DEMO_Hextern int Func(int x,int y);#endif/*C实现文件:CDemo.c*/#include " CDemo.h "int Func(int x,int y ){ ......}//C++中调用extern "C" { #include " CDemo.h "}int main(){ Func(1,6); return 0;}
1 小心使用memcpy系列的函数
memcpy、memset、memcmp系列函数对C风格的数据类型简介安全
但是由于C++的多态,使用虚函数时,类的每一次继承都会产生一个虚函数表,其中存放的是指向虚函数的指针,这些虚函数表必须存放在对象体中,也就是说和对象的数据放在一起,这样对象在内存里并不是以连续的方式存放的,所以使用memcpy系列函数可能导致无法预料的错误。
2 尽量使用new/delete代替malloc/free
mollac与new之间的区别:
1) new 是C++的运算符,而malloc是C的标准库函数
2) new创建的东西具有类型,而malloc返回的是void*,需要强制类型转换
3) new可以自动调用对象的构造函数,而malloc不会
4) new失败会调用new_handler处理函数,malloc失败会直接返回null
free与delete
delete是C++的运算符,free是C的库函数
delete可以自动调用对象的析构函数,而free不会
3 灵活的使用不同风格的注释
2种不同的注释方法: // 表示注释单行;/* 和*/组合注释两者中间的所有代码
4 尽量使用C++标准的iostream
建议用#include <iostream>代替#include <iostream.h>、#include <stdio.h>、#include<cstdio>
5 尽量使用C++风格的强制类型转换
即const_cast<T*>(a) static_cast<T*>(a) reiniterpret_cast<T*>(a) dynamic_cast<T*>(a)
6 尽量用const、enum、inline替换#define
先偷会懒,嘿嘿,http://book.51cto.com/art/201202/317613.htm
7 用引用代替指针
★ 相同点:
1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;
引用是某块内存的别名。
★ 区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
引用“从一而终” ^_^
4. 引用没有 const,指针有 const,const 的指针不可变;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为类成员名称时,其占用空间与指针相同4个字节(没找到标准的规定)。
7. 指针和引用的自增(++)运算意义不一样;
- 编写高质量代码之改善C++程序语法篇2<从C到C++需要做的改变>
- 编写高质量代码:改善Objective-C程序的几个建议
- 《编写高质量代码:改善Objective-C程序的61个建议》
- 代码质量优先——《编写高质量代码:改善c程序代码的125个建议》
- 编写高质量代码之改善C++程序语法篇3<内存管理 >
- 每周一书-编写高质量代码:改善C程序代码的125个建议
- 《编写高质量代码:改善C程序代码的125个建议》
- 编写高质量的Objective-C代码
- 编写高质量的Objective-C代码
- 编写高质量的Objective-C代码
- 编写高质量的Objective-C代码
- 编写高质量的Objective-C代码
- 编写高质量的Objective-C代码
- 编写高质量的Objective-C代码
- 编写高质量的Objective-C代码
- 编写高质量的Objective-C代码
- Objective-C编写高质量代码 字面量语法
- Objective-C编写高质量代码 字面量语法
- 多线程TCP socket服务器
- 互联网电商系统架构技术
- MongoDB系列之三(副本集配置 持续更新)
- 服务器基本知识
- javaweb基础(3)
- 编写高质量代码之改善C++程序语法篇2<从C到C++需要做的改变>
- django资源
- Android中对GridView, ListView等滚动控件的Touch事件onInterceptTouchEvent,onTouchEvent了解
- 嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得
- Android中一个用Handler实现的循环任务
- <iOS>响应事件传递, nextResponder研究
- IOS OC声明变量在@interface括号中与使用@property的区别
- MySql存储过程中limit传参
- 百度开发者面试题目解答