C++ Primer 第四章 表达式

来源:互联网 发布:公安部第三研究所 知乎 编辑:程序博客网 时间:2024/06/05 10:21
  • C++定义了重载运算符,就是就以往的操作符重新定义新的功能,例如+可以进行两个类别之间的加,扩展了以往运算符的功能。>> << 对于cout也是重载的。
  • 对于没有指定执行顺序的运算符,如果表达式修改同一个对象,将引发未定义行为。如cout << i <<”“<< i++;这种输出未定义,因为不知道先<<还是先i++。C缺陷和陷阱里面也有这一章节,明确规定了这些东西。
  • 求值顺序只有4个规定,其他顺序不清楚。注意求值顺序和优先级结合律无关。a=f()+g()*h()+j(),哪个优先执行并不清楚。如果函数内容无关可以这样做,如果某几个函数影响同一个对象,那么产生未定义结果。
    这里写图片描述
    这里写图片描述
    上面被称作短路求值
  • 关系运算符比较对象然后返回bool类型。
  • 赋值运算符重载很多。赋值运算满足右结合。上图也说明了。a=b=c=0;
  • 递增递减运算符。求值结果不同,前置将运算对象加1或减1,然后将改变后的对象作为求值返回结果后置也将运算对象加1或减1,但是求值结果是原始值的副本。
    这里写图片描述

  • 注意这种简洁表达,以前C语言不太清楚这个地方,返回值是啥?
    这里写图片描述
    这里写图片描述

  • sizeof
    这里写图片描述
    这里写图片描述
int main(void){    int x[20];    int *ptr = x;    cout<<sizeof(ptr)<<endl;//输出应该是8字节,因为Linux指针存储8字节    cout<<sizeof(x)<<endl;//输出应该是数组大小.20*4字节    cout<<sizeof(x)/sizeof(*x)<<endl;//输出应该是数组维度    cout<<sizeof(ptr)/sizeof(*ptr)<<endl;//输出应该是8/4=4    exit(0);}

8
80
20
2
按 来关闭窗口…

  • 命令类型转换和旧式的类型转换区别效果相同,但是命令便于理解,防止报错误。
    这里写图片描述
原创粉丝点击