变量
1、左值与右值
左值(lvalue发音:ell-value):左值可以出现在赋值语句的左边或者右边。
右值(rvalue发音:are-value):右值只能出现在赋值语句的右边,不能出现在赋值语句的左边。
变量时左值,因此可以出现在赋值语句的左边。数字字面值是右值,因此不能被赋值。
C++程序员一般称变量为“变量”或者“对象”(object)。
2、对象:在内存当中具有类型的区域。
3、变量名:变量的标识符,可以由字母,数字和下划线组成,但必须以字母或下划线开头,并且区分大小写字母。如:
int somename, someName, SomeName, SOMENAME;
虽然变量名没有长度限制,但是不应该太长,影响阅读。
4、一些关键字和操作符的替代名不能作为标识符!
5、变量名的命名习惯:
1)变量名一般用小写字母。如:index
2)标识符应使用能帮助记忆的名字,能够提示在程序中的用法的名字,如:on_loan,salary;
3)包含多个词的标识符书写时在每一个词之间添加一个下划线,或者每个内嵌的词的第一个字母都大写。如student_loan或者studentLoan。
4)命名习惯最重要是保持一致。
6、定义对象: 以类型说明符开始,后面紧跟着以逗号分开的一个或者多个说明符列表。分号结束定义。
类型决定了分配给变量的储存空间的大小和可以在其上执行的操作,同时,多个变量可以定义在同一条语句中。如:double salary,wage;
7、初始化: 变量定义指定了变量的类型和标识符,也可以为对象提供初始值,定义时指定了初始值的对象称为已初始化。
C++支持两种初始化变量的形式: 复制初始化和直接初始化
int ival(1024); 直接初始化
int ival = 1024; 复制初始化
注意:初始化不是赋值!初始化指创建变量并给它赋初始值,而赋值测试擦除对象的当前值并用新值代替。
8、初始化内置类型的对象只有一种方法:提供一个值,并复制到新的对象中。此时的复制初始化和直接初始化没差别。
对于类类型来说,有些初始化仅能用直接初始化完成:
以string为例,1) 作为字符串字面值的副本:
Std::string titleA = "C++ Primer, 4th Ed.";
Std::string titleB ("C++ Primer, 4th Ed");
2) 通过一个计数器和一个字符初始化string对象。
如:std::string all_nines(10, '9'); 等价于 all_nines = "9999999999" ;
9、初始化多个变量:当一个定义中定义了两个以上变量的时候,每个变量都可能有自己的初始化。(已初始化变量和未初始化变量可以在同一个定义中定义)
如: double salary = 9999.99 ,
Wage(salary +0.01); (两种形式的初始化文法混用)
int interval,
Month = 8, day =7, year = 1999;(初始化和未初始化在同一定义)
注意:
1、内置类型变量的初始化: 未初始化的变量作用于任何其他用途都是没有定义的,除了用作赋值操作符的左操作数。
2、建议每个内置类型的对象都要初始化,这样做不总是必须的,但是最容易和安全的。 如果使用未初始化的变量会引起程序崩溃或者错误的计算结果。
3、类类型变量的初始化: 注意它的两种初始化方法。 另外,如果定义某个类的变量时没有提供初始化,它会通过一个默认构造函数来实现定义。
10、声明和定义:
定义: 用于为变量分配存储空间,还可以为变量指定初始值。一个程序中,变量有且只有一个定义。
声明:用于向程序表明变量的类型和名字。(在定义时,其实也有声明变量的类型和名字) 可以通过extern 关键字声明变量名而不定义它。Extern 声明不是定义,也不分配储存空间。 程序中变量可以声明多次,但是定义只有一次。
注意:
如果声明有初始化式,那么就被当做是定义,即使有extern。如:
extern double pi = 3.1415 ; (定义)
当已初始化的extern声明被当作定义后,该变量任何随后定义都是错误的。如: extern double pi = 3 .1415 ; (定义)
extern double pi ; (声明,不出错)
double pi ; (重定义,出错)
extern double pi =3.1415 ; (重定义,出错)
-------------------------------------------------------------------------------------------------------------------------------------------------------------
在变量这一章节中,有许多细节需要注意,就像上文中的一些红色字体。变量的命名规范也是编程规范的一部分,所以需要特别注意。第二是,对于类类型的初始化还是有一点没弄得很明白,就是两种初始化方法的使用情况,也许需要在学习类之后再重新理解一下今天的内容!同时,还学习了直接初始化和复制初始化。第三点是学习到了声明和定义的区别,声明没有分配储存空间,声明只是告诉程序变量在这里出现。定义为变量分配了存储空间,同时也是给变量赋上初始值。其实个人觉得定义时也包括了声明!
(努力学习第二天!)