cpp(第五章)

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

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

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

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

多线程编程)。

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

3.

1 int quizscores[10]={20,20,20,20,20,19,20,18,20,20};
2 cout<<"doing it right: "<<endl;
3 int n_i;
4 for (n_i= 0; quizscores[n_i]== 20; n_i++)
5 cout<<"quiz "<<n_i<<" is a 20"<<endl;
6 cout<<"doing it dangerously wrong: "<<endl;
7 for(n_i= 0; quizscores[n_i]= 20; n_i++)
8 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= 0;
cout<<n_i++<<endl<<n_i++<<endl<<n_i;
return 0;
}
#include <iostream>
inline int add(int &n)
{
    n= n+1;
    return n-1;
}
int main()
{
    using namespace std;
    int n_i= 0;
    cout<<add(n_i)<<endl<<add(n_i)<<endl<<n_i<<endl;
    cout<<n_i<<endl;
    return 0;
}

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

5.

int x_i= (1,024);
x_i= 1,024;

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

原文地址:https://www.cnblogs.com/Call-C/p/5498113.html