zoukankan      html  css  js  c++  java
  • 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只改变常量属性


  • 相关阅读:
    [CQOI2011]放棋子
    [CF1192B]动态直径
    [CERC2016]凸轮廓线
    19_08_14-19_08_21校内训练 补题
    [模板]线性递推+BM
    19_08_10[校内训练]割图
    [模板]多项式封装(无讲解)
    19_07_11校内训练[字串染色]
    CF990G
    19_07_09校内训练[分组]
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9326108.html
Copyright © 2011-2022 走看看