Posts Tagged ‘C++ Primer’

C++ Primer 随记——第 6 章,语句

Monday, February 23rd, 2009
  1. case 标号必须是整型常量表达式。(Page 176)
  2. 任意两个 case 标号不能相同。(Page 176)
  3. 对于 switch 结构,只能在它的最后一个 case 标号或 default 标号后定义变量。(Page 176)
  4. 在循环条件中定义的变量在每次循环里都要经过创建和撤销的过程。(Page 178)
  5. goto 语句不能跨越变量定义向前(下)跳转。(Page 185)
  6. goto 语句只能在同一函数内跳转。(Page 185)
Tags:,

Related Posts

C++ Primer 随记——第 5 章,表达式

Monday, February 23rd, 2009
  1. 负数的位运算,符号位的处理是机器相关的。(Page 134)
  2. 有符号数的右移操作插入符号位的副本或者 0,具体由实现而定。(Page 134)
  3. 以为操作符的有操作数必须非负,并且严格小于左操作数的位数,否则,结果是未定义的。(Page 134)
  4. 只有逻辑与、逻辑或、条件运算符和逗号运算符规定了求值顺序。(Page 148)
  5. 包含 signed int 和 unsigned int 的表达式, signed int 会转换为 unsigned int。(Page 155)

疑问:

  1. 强制类型转换。
Tags:,

Related Posts

C++ Primer 随记——第 4 章, 数组和指针

Sunday, February 8th, 2009
  1. void* 指针只支持几种有限的操作:比较、传参数、赋值。不能通过 void* 指针操纵它所指向的对象。(Page 104)
  2. void* 不是万能的,它不能指向 const 对象,使用 const void* 指向 const 对象。(Page 110)
  3. 指向 const 对象的指针也必须具有 const 特性。(Page 110)
  4. 定义指向数组的指针要注意优先级。比如 int (*ip)[4];。(Page 123)
Tags:,

Related Posts

C++ Primer 随记——第 3 章,标准库类型

Thursday, February 5th, 2009
  1. 定义元素类型没有任何构造函数的 vector,标准库将对该对象的每个成员进行值初始化。(Page 80)
  2. vector 迭代器支持一些算术操作。(Page 87)
  3. string 对象和 bitset 对象之间是反向转化的。(Page 89)
Tags:,

Related Posts

C++ Primer 随记——第 2 章,变量和基本类型

Friday, January 23rd, 2009

很久很久以前就买了 C++ Primer,但是一直是当工具书来看,现在闲下来了,就拿来仔细看看。

(由于是随记,看不懂的就不要看了)

第 1 章,快速入门,没有要记的。

第一部分 基本语言

第 2 章,变量和基本类型

  1. 表示整数、字符和布尔值的算数类型合称为整型。
  2. char 是 signed 还是 unsigned 是由编译器确定的。
  3. signed 类型如何用位来表示是由编译器决定的。
  4. 8 位 signed 类型的取值至少 -127~127,许多实现允许 -128~127。
  5. 将超出取值范围的数赋给 signed 类型时的行为是未定义的。
  6. 将超出取值范围的数赋给 unsigned 类型时,编译器会使用该值对 unsigned 类型的可能取值数目取模,然后将结果赋给该 unsigned 类型。
  7. 没有 short 类型的字面值常量。
  8. 默认的浮点字面值常量为 double 类型,在数值后面加 F 或 f 表示单精度,L 或 l 表示扩展精度。
  9. 字符前面加 L (只能大写)得到 wchar_t 类型的宽字符字面值。
  10. 字符串前面加 L (只能大写)得到宽字符串字面值。
  11. 两个相邻的仅由空白字符隔开的字符串字面值(或宽字符串字面值)可以连成一个新字符串字面值。
  12. 连接字符串字面值和宽字符串字面值的结果是未定义的。(g++ 会输出一个类似内存地址的东西,谁来解释下?)
  13. C++ 定义了保留了一片关键字和替代名(63 个关键字和 11 个替代名)
  14. 标识符不能饱含两个连续的下划线,也不能以下划线开头后面紧跟一个大写字母,函数外面定义的标识符还不能以下划线开头。C++ 把他们留给标准库了……
  15. 在全局作用域里定义的 const 对象默认具有文件作用域,使用 extern 使整个程序可以访问它。(非 const 变量默认为 extern)
  16. 枚举成员值可以不是惟一的。比如 enum p {p1 = 1, p2 = 1, p3}; 是合法的。

看完这一章,我发现 C++ 里有太多未定义的行为,不要依赖他们。

有一个问题,先看下面这段(在 2.3.1 节):

C++ programmers tend to be cavalier in their use of the term object. Most generally, an object is a region of memory that has a type. More specifically, evaluating an expression that is an lvalue yields an object.

C++ 程序员经常随意地使用术语对象。一般而言,对象就是内存中具有类型的区域。说得更具体一些,计算左值表达式就会产生对象。

什么叫“计算左值表达式就会产生对象”,计算右值表达式的时候不会产生对象吗?望高人解答。

Tags:,

Related Posts