C++ Primer chap4
1 关于取余
3.14 % 3; // 编译时刻错误: 浮点操作数
21 % 6; // ok: 结果是 3
21 % 7; // ok: 结果是 0
21 % -5; // 机器相关: 结果为 -1 或 1
2 static_cast<int> ( byte_value )
称为显式类型转换 (explicit type conversion ) 或强制类型转换 (cast), 强制转换使编译
器把一个对象 或表达式 从它当前的类型转换成程序员指定的类型 在这种情况下, 我们把byte_value 转换成一个int 型的对象。
3 C++支持C格式的位操作,也提供了专门进行位操作的类bitset; bitset< 32 > bitvec2( 0xffff ); 创建一个前16位为1的32位位变量。
必须包含头文件<bitset>。
4 加减乘除的优先级比按位左移和右移及按位与,或,非的优先级高,只是比按位非的优先级低。因为按位非是单目运算符。
5 long 类型的一般转换有一个例外 如果一个操作数是long 型 而另一个是unsigned int型 那么 只有机器上的long 型足够长以便能够存放unsigned int 的所有值时 一般来说在32 位操作系统中 long 型和int 型都用一个字长来表示 所以不满足这里的假设条件unsigned int 才会
被转换为long 型 否则两个操作数都被提升为unsigned long 型
6 显式转换符号的一股形式如下
cast-name< type >( expression );
这里的cast-name 是static_cast const_cast dynamic_cast 和reinterpret_cast 之一
const_cast 正如其名字所暗示的 将转换掉表达式的常量性 以及volatile 对象的volatile
性 例如
extern char *string_copy( char* );
const char *pc_str;
char *pc = string_copy( const_cast< char* >( pc_str ));
试图用其他三种形式来转换掉常量性会引起编译错误 类似地 用const_cast 来执行
般的类型转换 也会引起编译错误
编译器隐式执行的任何类型转换都可以由static_cast 显式完成
double d = 97.0;
char ch = static_cast< char >( d );