【C++ Primer】表达式

来源:互联网 发布:去哪学软件开发 编辑:程序博客网 时间:2024/05/18 01:45

五、表达式


1. 求模

两个操作符都为负数,求模的结果为负数,或0: -21 % -8 =-5;

如果只有一个操作数为负数,则结果取决于机器;符号也取决于机器: 21 % -5 = 1 or -4


判断一个整数是否是为奇数,用x % 2 != 0,不要用x % 2 == 1,因为x 可能是 负数


2. 操作符

移位操作符具有中等优先级:优先级比算数操作符低,但比关系操作符、赋值操作符和条件操作符优先级高。

只有在必要时才使用后置操作符:i++; 前置操作符所做的工作更少

*iter++ : 后自增操作优先级高于解引用操作,因此相当于*(iter++)  : 规则: 简洁是美


sizeof:sizeof操作符返回一个对象或类型名的长度,返回值类型是size_t,长度单位是字节

   对引用类型做sizeof操作将返回存放此引用类型对象所需的内存空间大小;

   对指针做sizeof操作返回存放指针所需的内存大小;

   对数组做sizeof操作等效于对元素类型做sizeof操作的结果乘以数组元素的个数

strlen("val") : 3   / sizeof("val") : 4

char *words[] = {"adf","sdfs","dsf"};   sizeof(words)=3


对于一个空类型,没有任何成员函数和成员变量,对该类型求sizeof,得到的结果是1.

对于仅包含虚析构函数的类型,则会在实例中产生一个指向虚函数表的指针,32位机器占4字节,64位机器占8字节。


3. new和delete

动态创建的对象可用初始化变量的方法初始化: int *pi = new int(1024);


delete必须与new一起出现,除非指针的值为0,但这个操作没有任何意义,在delete操作之后,应立即将指针设置为0;



4. 类型转换

在算数转换中,表示式是将操作数转换为表达式中的最大类型;


强制类型转换:

dynamic_cast 将基类类型对象的引用或指针转换为同一继承层次中其他类型的引用和指针。


const_cast:意思是去除表达式的const性质,常用于const变量被需要调用非const变量的函数使用

如:const char *pc_str; char *pc = string_copy(const_cast<char*>(pc_str));

该语句也可用以前的强制转换方法 char *pc = string_copy((char*)pc_str);但不建议这做


static_cast:编译器隐式转换的都可以由其完成:

double d = 97.0;  char ch = static_cast<char>(d);

还可以完成非隐式转换内容: void * p = &d;  double *dp = static_cast<double*>(p);

两者之间应该有一定关系,主要是继承,但是从基类到子类的转换,用static_cast并不是安全的。子类到基类是安全的。


reinterpret_cast: 转换的两者直接不需要有任何关系。完成static_cast所不能完成的转换。依赖于机器,比较危险。

原创粉丝点击