表达式部分的笔记

来源:互联网 发布:java游戏服务器源码 编辑:程序博客网 时间:2024/06/02 04:31
 一元操作符优先级最高,其次是乘,除操作,接着是二元的加减法操作,这些算术操作符都是左结合,即优先等级相同时这些操作符从左到右依次与操作数结合。


当只有一个操作数为负数时,求模操作结果值的符号可根据分子或分母的符号而定,若结果对分子的符号,则除出来的值向零取整,如果与分母符号相同,则向负无穷取整。


逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算器右操作数,只有当仅靠做操作数的值无法确定逻辑表达式结式时才会求解器右操作数,这通常被叫做“短路求值”


左移操作符(<<)在右边插入0以补充空位,如果右移操作符是无符号数,则从左边差零,如果为有符号数,则插入符号位的副本或者零值。

赋值表达式的值是其左操作数的值,其结果的类型为左操作数的类型
与其他而元操作符不同,赋值操作具有右结合特性,当表达式含多个赋值操作符时,从右向左结合。
具有低优先级

*i++自增操作优先级高于解引用操作,等效于*(i++)


解引用优先级低于点操作符,为了避免忘记加括号而带来的错误,引进了->箭头操作符,(*p).foo与p->foo等价。
附5.18练习
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
    vector<string*>ivec;
    string a;
 //ivec是一个指针,所以不能直接把a追加到ivec中,而是再定义一个指针,再对其赋值。  
    while(cin>>a)
    {
        string* p=new string;
        *p=a;         
        ivec.push_back(p);              
    }
    for(vector<string*>::iterator x1=ivec.begin();x1!=ivec.end();x1++)
    {
        cout<<**x1<<"      "<<(**x1).size()<<endl;  
    //x1是vector<string*>类型的迭代器,*x1代表的是ivec即一个指向string类型的指针
    //所以**x1才是表示输入的内容。                    
    } 
    system("pause");  
    return 0;
}

对指针做sizeof操作将返回存放指针所需的内存大小,如果对经过解引用的指针做sizeof操作则返回该指针所指向对象的大小。
对数组做sizeof操作结果是其元素个数乘上元素类型的sizeof

逗号表达式的结果是其最右边表达式的值

如果指针指向不是用new分配的内存地址,则在该指针上使用delete是不合法的。
删除(delete)动态分配内存失败称为“内存泄露”。

指向任意数据类型的指针都可转换为void*类型;整型数值常量0可转换为任意指针类型。
原创粉丝点击