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 ); 

原文地址:https://www.cnblogs.com/liujiahi/p/2196387.html