• Chapter4(表达式) --C++Prime笔记


    1.重载运算符:为已经存在的运算符赋予另外一层含义。

    2.左值与右值:  
    ①当一个对象被用作右值的时候,用的是对象的值(内容);当一个对象被用作左值的时候,用的是对象的身份(在内存中的位置)。
    ②在需要用的右值的地方可以用左值替代,但是不能把右值当成左值使用。

    3.在C++中一般的表达式说明符运算对象的求值顺序都没有明确规定,是随机的,因此在这些表达式中的对象来说,如果表达式指向并修改了同一个对象,会引发未定义的错误,只有四个运算符的求值顺序是规定的,规定先求左侧运算对象的值,&&  ||  ?: ,(逗号运算符)

    4.(-m)/n和m/(-n)等价于-(m/n)而m%(-n)等价于m%n,(-m)%n等价于-(m%n)

    5.赋值运算符的优先级低于关系运算符的优先级,所以在条件语句中,赋值部分通常应该加上括号。

    6.除非必须,否则不使用递增递减运算符的后置版本。因为后置版本会有一个保留原始版本副本的过程,浪费资源。

    7.sizeof并不实际计算运算对象的值。因此即使用sizeof计算解引用一个无效的指针仍是一种安全的行为。sizeof对数组执行得到整个数组所占空间大小。sizeof不会把数组转换成指针来处理。

    8.在大多数用到数组的表达式中,数组自动转换为指向数组首元素的指针。但是当数组被用作decltype,取地址符(&),sizeof以及typeid时候,这种转换不会发生

    9.命名的强制类型转换:格式 cast-name<type>(expression);
    cast-name分别为:
    ①static_cast:任何明确定义的类型转换,只要不包含底层的const,都可以用它。
    例子:double slope = static_cast<double>(j) /i;
    ②const_cast:只能改变运算对象的底层const,不能改变其类型
    const char *cp;
    char *q = static_cast<char*>(cp); //错误,static_cast不能去掉底层的const
    static_cast<string>(cp);//正确,字符串字面值转换成string类型
    const_cast<string>(cp);//错误,const_cast只改变常量属性


  • 相关阅读:
    JDBC基本入门-JDBC中各个接口和类详解
    Docker 安装与基本使用
    java打包和运行的方式
    使用@Valid+BindingResult进行controller参数校验
    Antd使用timePicker封装时间范围选择器(React hook版)
    antd的table组件设置Column的width列宽度不生效问题
    vector二维数组如何排序
    递归反转链表(通俗详解)
    安装pythorch出现“由于目标计算机积极拒绝,无法连接”问题
    C语言字符串
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9326108.html
Copyright © 2020-2023  润新知