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