- GCC:GNU Compiler Collection(GUN 编译器集合)可以编译多种语言
- gcc和g++是其中的两种:这两个只是驱动器,并不是编译器,只是会调用GNU
| gcc | g++ | |
| 编译器类型 | C编译器 | C++编译器 |
| 对.c和.cpp文件 | 分别当做c和cpp文件编译 | 统一当做cpp文件编译 |
| STL | 而gcc不会自动链接STL | g++会自动链接标准库STL |
| 宏的使用 | .c 可使用的预定义宏是比较少 .cpp会加入一些额外的宏 | 都会加入一些额外的宏 |
| 对STL的使用 | 需要加参数 –lstdc++ | 不需要额外加参数 |
malloc:void *malloc(unsigned int size)
在内存的动态分配区域中分配一个长度为size的连续空间,分配成功则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会初始化,存储的是一些数据数据
calloc:void *calloc(unsigned int num,unsigned int size)
按照所给的数据个数和数据类型所占字节数,分配一个 num * size 连续的空间。
calloc申请内存空间后,会自动初始化内存空间为 0
realloc: void *realloc(void *ptr,unsigned int size)
动态分配一个长度为size的内存空间,并把内存空间的首地址赋值给ptr,把ptr内存空间调整为size,申请的空间不会初始化
typeid关键词: 用来获取一个表达式的类型信息 typeid操作符的返回结果是名为 type_info 的标准库类型的对象的引用new :是动态分配内存的运算符,自动计算需要的空间,同时调用类的构造函数,对内存空间进行对类的初始化。动态分配内置类型推导是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量都不进行初始化
typeid的用法:
- typeid(表达式)
- typeid(数据类型)
type_info 类注意的事项:
- 这个类的构造函数是private的,因此用户不能直接构造这样的对象,只能通过typeid()函数来获取这个对象
- 不能直接赋值 =,在type_id中为私有类型
type_info 类的用法:
==(判断两个类型是否相同)
- !=(判断两个类型是否不同)
- name()(获取数据类型)
- raw_name() 用来返回名字编码算法产生的新名称
- hash_code() 用来返回当前类型对应的 hash 值(不同编译器可能不同)
以下说明name()的用法
class person
{
};
int main()
{
int a = 10;
cout << typeid(a).name() << endl;
cout << typeid(int).name() << endl;//可以为关键词
cout << typeid(25.1+1).name() << endl;//可以为表达式
person p;
cout << typeid(p).name() << endl;//可以对类使用
//因为typeid返回的是type_info,可以用type_info来接收结果
const type_info& P = typeid(int);
cout << P.name() << endl;
return 0;
}



