#include <iostream>
#include <string>
using namespace std;
int main()
{
int a = 5;
int& b = a;
int* c = &a;
cout << "CASE 1" << endl;
cout << "a is " << a << endl << "b is " << b << endl << "c is " << *c << endl;
b = 10;
cout << endl << "a is " << a << endl << "b is " << b << endl << "c is " << *c << endl << endl;
cout << "CASE 2";
a = 5;
cout << endl << "a is " << a << endl << "b is " << b << endl << "c is " << *c << endl;
b = 10;
cout << endl << "a is " << a << endl << "b is " << ++b << endl << "c is " << *c << endl << endl;
cout << "CASE 3";
a = 5;
cout << endl << "a is " << a << endl << "b is " << b << endl << "c is " << *c << endl;
b = 10;
cout << endl << "a is " << a << endl << "b is " << b++ << endl << "c is " << *c << endl;
}
产出:
案例1:
a is 5. b is 5. c is 5.
a is 10. b is 10. c is 10.
案例2:
a is 5. b is 5. c is 5.
a is 11. b is 11. c is 10.
案例3:
a is 5. b is 5. c is 5.
a is 11. b is 10. c is 10.
我理解案例1。但是我很难理解案例2和案例3。有人能解释为什么c
在这两种情况下都不更新新值吗?
发布于 2017-05-07 14:44:52
操作数的计算顺序未指定,您正在修改对象并读取它,而不对这些操作进行排序。
因此,您的程序与cout << a << a++;
一样未定义,任何事情都可能发生。
发布于 2017-05-07 14:45:24
我认为您的问题是由于所谓的序列点。您可以在this answer中读到这方面的内容,但在几个词中,它基本上说明了表达式元素的顺序或计算。
在您的例子中,更新(这个顺序)是未定义的,尽管有些编译器似乎将其从右到左。
https://stackoverflow.com/questions/43832561
复制相似问题