【c++ primer读书笔记】【第4章】表达式

1.  左值和右值

当一个对象被用作右值的时候,用的是对象的值(内容),当对象被用作左值的时候,用的是对象的身份(在内存中的位置)

2.算术运算符

c++新标准中,(-m)/n和m/(-n)都等于-(m/n),m%(-n)等于m%n,(-m)%n等于-(m%n)

cout<<21/6<<endl;   //结果是3
cout<<21/-6<<endl;  //结果是-3
cout<<-21/-6<<endl; //结果是3

cout<<21%6<<endl;   //结果是3
cout<<21%-6<<endl;  //结果是3
cout<<-21%-6<<endl; //结果是-3

3. 递增递减运算符:前置版本和后置版本

int i=0,j;
j=++i;   //j=1,i=1:前置版本得到递增之后的值
j=i++;   //j=1,i=2:后置版本得到递增之前的值

前置版本把值加1后直接返回改变了的运算对象,后置版本需要将原始值存储下来,因此如果不需要修改前的值,后置版本的操作是一种浪费,最好使用前置版本的递增递减运算符

4.  sizeof运算符

sizeof运算符返回一条表达式或一个类型名字所占的字节数,满足右结合律

在sizeof的运算对象中解引用一个无效指针是一种安全的行为,因为指针实际上没有真正被使用

int *p
sizeof *p; //正确,

对数组执行sizeof运算得到整个数组所占空间的大小,sizeof运算不会把数组转换成指针来处理。

int ia[]={1,2,3,4};
cout<<sizeof(ia)<<endl; //如果一个int占4个字节,则输出16

对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占了多少空间

string str("abcd");
cout<<sizeof(str)<<endl; //在我的机器上输出了28

 

原文地址:https://www.cnblogs.com/ruan875417/p/4495578.html