c语言和c++语言中的几个常识问题
在我刚上大学那会儿,学了c语言与cpp。当时肯定是没学好哈哈,记得我好长一段时间都认为c++语言就是c语言多了面向对象的部分(这个有可能是因为谭浩强的两本书实在太像了)。这段时间一直在总结c语言和cpp语言学习,cpp语言确实脱胎于c语言,但是有些地方确实还是会有细微的差别的。已经写了几篇博客了,今天这应该是最后一篇,讲的是一些c语言和cpp的几个常识问题.比如关键字struct与关键字class等。这个是收尾工作,所以内容十分平,我写的轻松,看起来也轻松。(因为内容实在是少,而且很简单)
c语言与c++文件的后缀名问题
这个问题在c语言中会遇到的比较少,但是C++中可能会遇到比较多,比如我就曾经遇到过后缀名是.cc
的文件,当时是有些困惑的,后来搞清楚了就好了.这里就来讲清楚这个.
c语言中的后缀名: 1. 源文件:.c
; 2.
头文件:.h
;
c++中的后缀名: 1.
源文件:.cpp
、.cc
、cxx
、.C
、.c++
;
2. 头文件:.hpp
、.h
、.hxx
;
由上我们看到c语言的后缀名比较固定,没什么好说的,但是cpp的后缀名似乎版本比较多样。这个其实没什么大不了的,就是一个标注,给人给机器看的,让我们知道它是哪种语言。但是我们也看到了cpp那么多版本也不是说所有版本在所有平台上都是可以的,有的平台不区分大小写(windows),所以.C
就不能用在该平台上,有的平台不支持+
号做后缀,.c++
就不能用,下面就列出各个平台支持的c++源文件后缀名版本:
Unix: C, cc, cxx, c
GNU C++: C, cc, cxx, cpp, c++
Digital Mars: cpp, cxx
Borland: C++ cpp
Watcom: cpp
Microsoft Visual C++: cpp, cxx, cc
Metrowerks CodeWarrior: cpp, cp, cc, cxx, c++
c++中的size_t与size_type
首先,必须得说,size_t
与size_type
没有本质的区别,都是被标准定义为一种unsigned int
类型。但使用时有一点区别需要注意:
1. size_t
类型是容器无关的,定义在全局名称空间中; 2.
size_type
类型是容器概念,没有容器不能使用;
size_t
定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版本.它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。size_t与size_type的引入增强了程序在不同平台上的可移植性。经测试发现,在32位系统中size_t是4字节的,而在64位系统中,size_t是8字节的,这样利用该类型可以增强程序的可移植性。理论上,它可以存储任何类型数组的最大大小。size_t类型通常用于循环,数组索引,大小的存储和地址运算。size_t可以存储一个指针,但有一个更好的选择uintptr_t。
c语言与c++中关键字struct的区别
c语言中的关键字struct
首先需要说明一下,在c语言中是没有关键字class的。只有关键字struct。
在c语言中,关键字struct用来开始构建结构体类型。如下: 1
2
3
4
5struct{
int a;
char b;
float c;
}x,y[10];struct{int a;char b;float c;}
是一种结构体类型,上述代码中声明a为这种类型的变量,y为包含10个这种类型变量的数组。不过会有人发现这样声明是不是太麻烦,确实有些麻烦,所以可以为这种结构体类型设置标签。如下:
1
2
3
4
5
6struct A{
int a;
char b;
float c;
};
struct A x,y[10];A
为该结构体的标签。也有很多人喜欢下面的用法:
1
2
3
4
5
6typedef struct {
int a;
char b;
float c;
} B;
B x,y[10];1
2
3
4
5
6
7typedef struct A{
int a;
char b;
float c;
struct A *next;
} B;
B x,y[10];
c++中的关键字struct与class
在c++中,关键字struct与class都是用来开始类的定义的(注意!cpp中关键字struct不再是用来开始结构体的定义,二是类的定义,与c语言中不再一样)。
那struct与class又有什么区别呢? 1. 我们都知道在类中,成员是有访问属性的,分别是public与private。这两个关键字唯一的区别就是,使用struct关键字时,如果没有访问说明符,那么成员默认是public的;而使用class关键字时,如果没有访问说明符,那么成员默认是private的。
- 在定义派生类时,如果没有提供派生访问说明符,则使用
struct
关键字定义的派生类默认是公有继承,class
关键字定义的派生类默认是私有继承。
关键字class还可以用在模板定义时修饰类型参数,相当于
typename
。
参考资料
- [1] C++ Primer(第5版)