C++ Primer 第五版:第2章
*****C++ Primer 第五版第2章学习笔记*****
*****实验代码在Red Hat 6.6或VS 2013中调试*****
*****文章内容依据当前知识撰写,存在认识的局限性*****
今天学习C++ Primer 的第2章,还没有看完,先写一点看书的心得和笔记。
对象类型决定对象包含的数据和能参与的运算操作,同时还决定了存储空间大小。
算术表达式中不要使用char,因为不同机器实现不一样,导致结果不同。
单精度计算不一定比双精度快。
C++类型不匹配时,是自动进行类型的转换。
C++的变量初始化有四种方式:
1.int a=0;
2.int a={0};
3.int a{0};
4.int a(0);
使用花括号初始化变量的方式称为:列表初始化。
对内置类型使用列表初始化去初始化一个值,且2者类型不通,存在丢失信息的风险,列表初始化将无法完成,例如:
long double a=3.1415926;
int b{a}; //编译报错,无法完成。
如果定义变量时没有指定初值,则变量被默认初始化(default initialized),此时变量被赋予了"默认值"。默认值到底是什么由变量类型决定,同时定义变量的位置也会对此有影响。
如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0。然而一种例外情况是,定义在函数体内部的内置类型变量将不被初始化(uninitialized)。一个未被初始化的内置类型变量的值是未定义的,如果试图拷贝或以其他形式访问此类值将引发错误。
每个类各自决定其初始化对象的方式。而且,是否允许不经初始化就定义对象也由类自己决定。如果类允许这种行为,它将决定对象的初始值到底是什么。
上面这段话讲的内容挺多,学过C语言的朋友应该能知道,这段话和变量的作用域是有很大关联的:
int
c;
int
&b=c;
int
&a=b ;
//a成为另一个c的引用.
int
&&d=b; //这里即体现了引用(&d)的引用(&&d),
指针值
指针的值(即地址)应属下列4种状态之一:
1.指向一个对象。
2.指向紧邻对象所占空间的下一个位置。 //这种我没理解什么意思,搜索了一下,发现有篇文章解释是int *p = &i ; p++;
3.空指针,意味着指针没有指向任何对象。
4.无效指针,也就是上述情况之外的其他值。
只要指针拥有一个合法值,就能将它用在条件表达式中。和采用算术值作为条件(参
见2.1.2 节,第35 页)遵循的规则类似,如果指针的值是0,条件取false:
int ival = 1024;
int *pi = 0; // pi 合法,是一个空指针
int *pi2 = &ival; // pi2 是一个合法的指针,存放着ival 的地址
if (pi) // pi 的值是0,因此条件的值是false
if (pi2) // pi2 指向ival,因此它的值不是0,条件的值是true
while (a>b) if(m>n) ....; else ....;
上面这段代码while循环后跟了if,else,并且while循环体没有加花括号,那么while循环体是到哪为止呢,我之前不理解,一直以为到第一个分号截止,直到看到这段代码,才知道if...else...这段代码是看作一个整体,因此上面的都是while循环。
暂时写到这,待续。
继续:不能定义指向引用的指针
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。