• 【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

     

  • 相关阅读:
    Akka详细介绍
    列举spark所有算子
    command not found所有执行命令总是报找不到
    Spark启动报错|java.io.FileNotFoundException: File does not exist: hdfs://hadoop101:9000/directory
    斐波那契数列的优化
    ganglia之web界面介绍
    linux环境下载和安装scala
    windows清空电脑的DNS缓存
    win10安装mysql一直卡在最后一步进行不下去
    maven的依赖管理详细
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4495578.html
Copyright © 2020-2023  润新知