C/C++ 表达式求值的example

#include <iostream>

// 流输出操作符 <<
// 1) 针对内置类型,只是普通的操作符
// 2) 而针对自定义类型 ,涉及到重载操作符,所以应该是 操作符函数,既然是函数,就牵扯到顺序点的问题。
//    在进入operater<< 函数前,完成实参表达式的求值计算(注意:计算顺序不定)
//    (注意顺序点:执行被调函数前的最后时刻,副作用生效,将数据从寄存器copy到内存栈),
//    而后,执行函数,使用求值完成后的实际变量(或表达式返回的临时对象)的结果定义并初始化行参。
void explain()
{
   // 先计算各个操作符要结合的 操作数(或表达式返回值),
   // 然后,在使用各个操作符将 求值完成后得到的实参变量值(或表达式返回值)的结果输出,
   /*******************************************************************************
    *  例如:std::cout << i++ << i  << ++i;
    *  i++ :+1运算,然后返回i 的origin值
    *  ++i :+1运算,然后返回寄存器中运算的值 origin+1(实时),而非变量在内存中对应的值
    *  i   :取变量在内存中对应的值
    *  将得到的3个值用操作符输出
    *  另外,
    * (1)前2者的计算顺序是不确定的
    * (2)未到达下一个顺序点,副作用未必生效,所以i的取值可能是origin、origin+1 或 origin+2
    ******************************************************************************/
   int i = 4;
   std::cout << i++ << i;
   std::cout << std::endl;
   int a = 4;
   std::cout << a << a++;
   std::cout << std::endl;
/*
45
54
*/
}


int main ()
{
    int a = 1;
//    std::out << a << a++ << a << std::endl;
    std::cout << a << (a++ || 0) << a << std::endl; // 212

    explain();
    return 0;
}

C/C++ 表达式求值的example,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。