zoukankan      html  css  js  c++  java
  • C++ 中表达式求值

    首先我们来看一段代码:
    int a() { return std::puts("a"); }
    int b() { return std::puts("b"); }
    int c() { return std::puts("c"); }
    void z(int, int, int) {}
    int main() {
        z(a(), b(), c());       // 允许全部 6 种输出排列
        return a() + b() + c(); // 允许全部 6 种输出排列
    }
    
    

    这段代码是cppreference网站中对与表达式求值顺序,做的一个引入介绍。这个代码中说的就是对于表达式求值顺序规则:若某个函数调用既不按顺序早于又不按顺序晚于另一函数调用,则它们是顺序不确定。

    这段代码的输出结果可能为:

    a
    b
    c
    a
    b
    c
    //或者
    b
    a
    c
    a
    c
    b
    //其实顺序完全不确定,进行排列组合会有多种输出顺序。
    
    平时求值顺序不确定的情况,主要有以下四种:

    1、若某个函数调用既不按顺序早于又不按顺序晚于另一函数调用,则它们是顺序不确定的

    2、对分配函数(operator new)的调用相对于 new 表达式中构造函数参数的求值来说,是顺序不确定的(c++17后先构造后分配)

    3、函数调用表达式中,每个形参的初始化的值计算和副作用相对于任何其他形参的初始化的值计算和副作用是顺序不确定的。

    4、带括号的初始化器中的逗号分隔的表达式列表中的每个表达式,如同函数调用一般求值(顺序不确定)。

  • 相关阅读:
    npx vs npm
    RubyGem镜像/ruby国内镜像
    IOS开发依赖管理工具CocoaPods
    alpine linux
    阿里妈妈图标库
    java应用系统运行速度慢的解决方法
    jvm程序执行慢诊断手册
    js强制不使用“兼容性视图”
    java.lang.NumberFormatException: Infinite or NaN
    ALTER添加列后,立即UPDATE该列会报错
  • 原文地址:https://www.cnblogs.com/Smarc/p/13791816.html
Copyright © 2011-2022 走看看