首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在std::cout中增量变量时没有显示更新值的指针

在std::cout中增量变量时没有显示更新值的指针
EN

Stack Overflow用户
提问于 2017-05-07 14:16:48
回答 2查看 121关注 0票数 4
代码语言:javascript
运行
复制
#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:

代码语言:javascript
运行
复制
a is 5. b is 5. c is 5.
a is 10. b is 10. c is 10.

案例2:

代码语言:javascript
运行
复制
a is 5. b is 5. c is 5.

a is 11. b is 11. c is 10.

案例3:

代码语言:javascript
运行
复制
a is 5. b is 5. c is 5.
a is 11. b is 10. c is 10.

我理解案例1。但是我很难理解案例2和案例3。有人能解释为什么c在这两种情况下都不更新新值吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-07 14:44:52

操作数的计算顺序未指定,您正在修改对象并读取它,而不对这些操作进行排序。

因此,您的程序与cout << a << a++;一样未定义,任何事情都可能发生。

票数 5
EN

Stack Overflow用户

发布于 2017-05-07 14:45:24

我认为您的问题是由于所谓的序列点。您可以在this answer中读到这方面的内容,但在几个词中,它基本上说明了表达式元素的顺序或计算。

在您的例子中,更新(这个顺序)是未定义的,尽管有些编译器似乎将其从右到左。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43832561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档