cpp(第五章)

时间:2023-03-09 22:51:05
cpp(第五章)

1.副作用,指的是在计算表达式时对某些东西(如存储在变量的值)进行修改;顺序点,是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用

都进行评估。(分号就是一个顺序点)。for example y= (4+ x++)+ (6+ x++),表达式4+ x++不是一个完整的表达式,因此c++不保证x的值在计算子表达式

4+ x++后立即增加1。换句话说c++没规定在计算每个子表达式之后将x的值递增还是在整个表达式计算完毕之后才将x的值递增。(在c++11文档中,不再使用术语

“顺序点”,因为这个概念难以用于讨论多线程执行。相反,使用了术语“顺序”它表示有些事件在其他事件前发生。这种描述方法并非要改变规则,而旨在更清晰地描述

多线程编程)。

2.前缀递增、前缀递减和解除引用运算符的优先级相同,从右到左;后缀递增和后缀递减优先级相同,但比前缀运算符的优先级高,从左到右。

3.

 int quizscores[]={,,,,,,,,,};
cout<<"doing it right: "<<endl;
int n_i;
for (n_i= ; quizscores[n_i]== ; n_i++)
cout<<"quiz "<<n_i<<" is a 20"<<endl;
cout<<"doing it dangerously wrong: "<<endl;
for(n_i= ; quizscores[n_i]= ; n_i++)
cout<<"quiz "<<n_i<<" is a 20"<<endl;

首先是把“==”用作“=”导致程序无线循环,避免这种错误可能有多种吧,但目前我知道最有效的是养成数值放左边,变量放右边。20==quizscores[n_i],这样就算用错

编译器也会提醒错误。接着闲着无聊在该检查条件时候发现一个非常有趣的现象,在为检查条件赋值为0时,程序竟然从头反复输出了...(只能说明笔者太无知了),原因

当然是我在申请数组后接着申请n_i变量,它们内存是连着放,所以当越界的时候下一个int内存就是索引自己本身的空间。这算比较好的情况,最糟糕的是索引内存不是在

数组内存后面,该出现可能导致其他应用程序无法运行。

4.

#include <iostream>
int main()
{
using namespace std;
int n_i= ;
cout<<n_i++<<endl<<n_i++<<endl<<n_i;
return ;
}
#include <iostream>
inline int add(int &n)
{
n= n+;
return n-;
}
int main()
{
using namespace std;
int n_i= ;
cout<<add(n_i)<<endl<<add(n_i)<<endl<<n_i<<endl;
cout<<n_i<<endl;
return ;
}

首先,cout流操作是先从右到左放进缓冲中,然后再从左到右输出。最后输出结果是 1 0 2 (自增符,目前还搞不懂为什么是这个结果) ,第二个输出1 0 0 2

5.

int x_i= (,);
x_i= ,;

首先逗号运算符表达式最后的值为最右子表达式,=的优先级大于','运算符,所以第一次x_i= 20,第二次 x_i= 1;