第二章①、
虽然语法上没有错误,但这个初始化没有意义,ival仍是未初始化的。整型的赋值当我们试着把一个超出其取值范围的值赋给一个指定类型的对象时,结果会怎样呢?答案取决于这种类型是signed还是unsigned的。对于unsigned类型来说,编译器必须调整越界值使其满足要求。编译器会将该值对unsigned类型的可能取值数目求模,然后取所得值。比如8位的unsignedchar ,其取值范围从0到255(包括255)。如果赋给超出这个范围的值,那么编译器将会取该值对256求模后的值。例如,如果试图将336存储到8位的unsigned char 中,则实际赋值为80,因为80是336对256求模后的值。
C++中,把负值赋给unsigned对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。所以把-1赋给8位的unsigned char,那么结果为255 。
②、
非法:同一定义语句中不同变量的初始化应分别进行。初始化:定义时指定了初始值的对象被称为是已初始化的。初始化指创建变量并给它赋初值,而赋值则是擦除对象的当前值并用新值代替。通过一个计数器和一个字符初始化string对象。这样创建的对象包含重复多次的指定字符,重复次数由计数器指定: std::string all_nines(10,'9'); //all_nines="9999999999"本例中,初始化all_nines的唯一方法是直接初始化。有多个初始化式时不能使用复制初始化。
③、const对象默认为文件的局部变量在全局作用域里定义非const变量时,它在整个程序中都可以访问。我们可以把一个非const变量定义在一个文件中,假设已经做了合适的声明,就可在另外的文件中使用这个变量:
与其他变量不同,除非特别声明,在全局作用域声明的const变量时定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。通过自定const变量为extern,就可以再整个程序中访问const对象:
非const变量默认为extern。要使const变量能够在其他的文件中访问,必须显式地指定它为extern。const对象必须要初始化,且其值不能被修改。
④、
⑤、const引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量。
非const引用只能绑定到与该引用同类型的对象。const引用则可以绑定到不同但相关的类型的对象或绑定到右值。
⑥、
枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行的:
注意把3赋给Points对象是非法的,即使3与一个Points枚举成员相关联。
⑦、概念:constant expression(常量表达式):值可以在编译时计算出来的整型表达式。
posted on 2009-08-11 23:08 八路 阅读(228) 评论(0) 编辑 收藏 引用 所属分类: C++primer 笔记
Powered by: C++博客 Copyright © 八路