2019.12.26C++primer学习笔记——C++数据类型

1.在32位环境中,int和long都是4个字节,在64位中,int占4个字节,long占8个字节。

2.声明不是定义,声明只是在编译前告诉编译器存在某个变量或方法,不涉及内存分配。

3.全局域内定义的变量会有初始值0,局部域内定义的变量或动态分配的内存中是未初始化数据。

4.C++中有C语言风格的字符串类型char *,本质是一个字符数组,具有底层特性,string是C++新封装的一个,目的是方便C++风格的字符串功能,string类内封装有各种功能的字符串处理方法。

5.string类能自动将C风格字符串转换为string类型,string类型要转换为const char *类型需要调用方法 .c_str()。

6.const关键字

7.引用类型类似指针操作,主要用于将类对象引用为形参传入函数。引用声明时必需初始化,一经初始化不可再指向别的对象。定义引用指针时若要指向const对象,需要定义const引用指针。

8.指针和引用有两个主要区别:引用必须总是指向一个对象;如果用一个引用给另一个引用赋值,那么改变的是被引用的对象而不是引用本身。

9.bool类型,false是隐式的0,true是隐式的1,指针中0和空指针可转为false,其他可转为true。

10.枚举成员无法直接输出成员名,直接cout输出的是成员名对应的值,且C++不支持枚举成员的前后移动,即枚举成员不可参与迭代。

forenum i = enum1 ; i < enum3 ; i++)
{ ... }
//编译错误,枚举成员不可参与迭代

缺省的枚举成员定义从0开始逐个加1,若第一个枚举成员的值初始化不为0,后面缺省的成员值也是逐个加1。

11.数组的定义必须有类型,数组名和维数组成,维数必须为常量表达式,即在数组定义的编译时就可以计算出维数的值,所以非const对象不可作为数组定义的维数。

12.初始化字符数组时有两种方法,一种是将每个成员显式表达,一种是用字符串进行初始化,两者不等价,字符串初始化在数组末尾多一个 ‘\0’ 结尾字符。

char s1[] = {'a' , 'b' , 'c'};
char s2[] = "abc"; //字符串初始化结尾多一个'\0'

13.vector容器类型与C++内置数组类型相似,但是可以用别的vector容器或内置数组的子集来给vector进行初始化,数组则必须逐个赋值。
注意使用数组初始化vector时,第二个参数为需要截取的数组子集结尾的后一个元素的地址。

int a[] = {1,2,3,4,5}
std::vector<int> b(a,a+3); //截取到a+2地址,不是a+3
printf("%d",b[2]); //输出结果为3
printf("%d",b[3]); //内存错误

14.typedef可为类型名定义一个别名,即助记符。
typedef有一个要点:用typedef名字初始化常量对象时,const修饰符修饰的是typedef名字而不是按顺序修饰。

typedef char *MyChar;
const MyChar a;
//注意a不是一个const char *指针,const修饰的是MyChar本身,
//所以a是一个char *const 指针。

15.在类定义内部定义的成员函数,在缺省情况下被设置为 inline,在类外而定义的成员函数必须显式地声明为 inline。

发布了25 篇原创文章 · 获赞 6 · 访问量 1417

猜你喜欢

转载自blog.csdn.net/weixin_43948991/article/details/103716527