练习4.1
表达式5+10*20/2的求值结果是多少?
解答:
#include <iostream>
using namespace std;
int main(){
cout << 5 + 10 * 20 / 2 << endl;
}
结果是105
练习4.2
根据4.12节中的表,在下述表达式的合力位置添加括号,使得添加括号后运算对象的组合与添加括号前一致。
(a) *vec.begin()
(b) *vec.begin()+1
解答:
(a) *(vec.begin())
(b)(*(vec.begin()))+1
练习4.3
C++语言没有明确规定大多数二元运算符的求值顺序,给编译器优化留下了余地。这种策略实际上是在代码生成效率和程序潜在缺陷之间进行了权衡,你认为可以接受吗?请说出你的理由。
解答:
这个问题问的很专业了,这涉及到了编译器对代码的翻译结果,以及对结果进行如何的处理。
但是,这里个人不是很清楚这个策略做了哪种权衡,所以不好说是否能接受。
不过,对于现在C++编译器的发展,由于这个空间的存在,应该会被优化的更好,让我们能得到更高效的程序。