C与C++之间的区别总结
来源:互联网 发布:ip与mac绑定防蹭网 编辑:程序博客网 时间:2024/05/01 00:42
(本文总结自《c++编程原理规范与实践》)
C不支持的C++的特性:
1、类和成员函数使用struct和全局函数
2、派生类和虚函数 使用struct、全局函数和指针
3、模板和內联函数使用宏
4、异常使用错误代码、错误返回值等
5、函数重载不同函数使用不同的名字
6、new和delete使用malloc()和free()
7、引用使用指针
8、常量表达式中const使用宏
9、bool类型使用int
10、static_cast,reintepret_cast,const_cast使用C传统的类型转换
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在C函数中:
1函数不可重命名;2函数参数类型检查是可选的,不强制;
3没有引用类型(因而参数传递也没有传引用方式);
4没有成员函数;5没有內联函数(C99标准除外);
6没有可选的函数定义语法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
虚函数最有效的替代技术之一就是函数指针:
typedef void ( *Pfct0 )( struct Shape2* );
typedef void ( *Pfct1int )( struct Shape2*,int );
struct Shape2
{
Pfct0 draw;
Pfct1int rotate;
/*...*/
};
void draw( struct Shape2* p )
{
( p->draw )( p );
}
void rotate( struct Shape2* p,int d )
{
( p->rotate )( p,d );
}
只是保存一个指向函数指针数组的指针即可。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~```
在C++中,未初始化的声明被视为一个定义,但在C中,仍被视为一个声明,因此可以重复多次:
int x;
int x; //in c is ok; in c++ is wrong
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
在c中,我们可以将void*赋予任何指针类型的变量,或用它来初始化指针变量,但在C++中是不可以的,必须进行显式 的转化;
例如:
void * alloc(size_t x);
void f(int n)
{
int *p=alloc(n*sizeof(int)); //ok in C;error in c++
//...
}
在C++中必须这样写:
int *p=(int *) alloc(n*sizeof(int));
因为这样做事不安全的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
小的语言差异:
结构标签名字空间:
在C(没有类的定义)中,struct的名字与其他标识符位于不同的名字空间。因此,每个struct的名字前面都要加上关键字struct为前缀(struct称为结构标签,struct tag);
在c++中就不用添加struct关键字。
与此类似的还有enmu;
在c中,我们可以将一个int值赋予一个enum变量,而无需类型转换。并且可以对枚举变量进行++/--运算,而在C++中是不允许的。
enum color{red,blue,green};
int x=green; //ok in c and c++
enum color col=7 ; //ok in c;error in c++
enum color col=(color) 7; //ok in c++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
C风格的字符串:
在C中,字符串就是一个以0结尾的字符数组,在c++中,通常称为 c字符串 或 c风格字符串。
char* p="asdf";
p[2]='x';
这两句在c中是正确的,但是在c++中是错误的,在c++中一个字符串文字常量被视为常量,不可以被修改;我们因该这样定义:
const char * p="adsdf";
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
字节操作:
在c++中不要使用memset(),memcpy(),momcmp(),memset();他们会干扰构造函数的正常工作。
- C与C++之间的区别总结
- java与c之间的最大区别
- C++ 与 C语言 之间的区别
- java与C/C++之间的区别
- C语言sprintf与sscanf函数总结及fscanf,sscanf,fprintf,sprintf之间的区别
- C语言与C++、C++与JAVA 的区别总结
- C与C++的语法区别总结
- C和C++的区别与总结
- c/c++/java之间的区别
- C++/C/JAVA/Python之间的区别?
- C#.NET中关于结构与类之间的区别
- C/C++中memcpy与strcpy之间的区别
- b/s 与c/s之间的区别和联系
- B/s 与c/s 之间的区别?
- c 和c++ struct之间的区别
- C、C++和VC++之间的区别
- C、C++和VC++之间的区别
- C语言数据结构之间的区别
- 趁热打铁,写下前几天做TOLO3G项目遇到的小问题
- java中使用队列:java.util.Queue
- 3.28
- UNIX 网络编程 卷一:套接字联网API(第3版) 读书笔记(6) 第六章 I/O复用:select和poll函数
- 毕业一年了
- C与C++之间的区别总结
- Bash Shell笔记
- 安装AdventureWorks2008后没有AdventureWorks2008数据库的解决办法
- Agile PLM Setting Up EC Attributes and Attribute Mappin
- Agile PLM Setting Up EC Attributes and Attribute Mappin
- Agile PLM Setting Up EC Attributes and Attribute Mappin
- TVS二极管的选型和应用测试计算实例
- Agile PLM Setting Up EC Attributes and Attribute Mappin
- Agile PLM Setting Up EC Attributes and Attribute Mappin