C++ 中的预增(或预减)

简介: 在 C++ 中,预增(或预减)可用作左值,但后增(或后减)不能用作左值

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。


在 C++ 中,预增(或预减)可用作左值,但后增(或后减)不能用作左值。


例如,以下程序打印a = 20(++a 用作 l 值)

// CPP 程序来说明 Pre-increment(或 pre-decrement)
#include <cstdio>
int main()
{
  int a = 10;
  ++a = 20; 
  printf("a = %d", a);
  getchar();
  return 0;
}
复制代码
a = 20
复制代码


上面的程序可以工作,而下面的程序编译失败,错误 “赋值中的非左值” (a++用作值)


// CPP 程序来说明后递增(或后递减)
#include <cstdio>
int main()
{
  int a = 10;
  a++ = 20; // error
  printf("a = %d", a);
  getchar();
  return 0;
}
复制代码
prog.cpp: In function 'int main()':
prog.cpp:6:5: error: lvalue required as left operand of assignment
 a++ = 20; // error 
复制代码


++a 与作为左值的 a++ 有何不同?


这是因为++a返回一个lvalue,它基本上是对我们可以进一步分配的变量的引用——就像

一个普通的变量。它也可以分配给一个引用,如下所示:


int &ref = ++a; // 有效的
int &ref = a++; // 无效的
复制代码


然而,如果你回想一下a++它是如何工作的,它不会立即增加它所持有的值。为简洁起见,您可以将其视为在下一条语句中递增。所以基本上发生的是a++返回一个rvalue

它基本上只是一个类似于未存储的表达式的值的值。a++ = 20;处理后可以想到如下:


int a = 10; 
复制代码


在编译时,a++ 被 a 的值替换,a 是一个右值:


10 = 20; // 无效
复制代码


a 的值递增


a = a + 1;
复制代码


这应该有助于理解为什么a++ = 20;不起作用。


如果你发现任何不正确的内容,或者想分享一些有关本文的更多内容,请在评论区告诉我。



目录
相关文章
|
缓存 JavaScript 前端开发
autojs代码规范
autojs代码规范
400 0
|
存储 运维 Java
如何画出优秀的软件架构图?
当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况: 对着画布无从下手、删了又来?
如何画出优秀的软件架构图?
|
API
《FFmpeg原理》第一版完成了
《FFmpeg原理》是一本音视频入门书籍,第一版是以 FFmpeg-n4.4.1 源码来分析写作的。
323 0
《FFmpeg原理》第一版完成了
|
资源调度 JavaScript
vue-cli3+webpack热更新失效问题
A项目中遇到问题,热更新失效,百思不得其解,查询搜索vuecli3热更新失效、vue histroy 模式热更新失效,网上看到不少方法,npm重新安装,不要用淘宝镜像cnpm安装;npm安装yarn,再用yarn重新install,yarn serve启动,在npm run serve 启动等方法都不好用。github有类似问题3.0.0-beta.16 热更新失效 · Issue #1559 · vuejs/vue-cli · GitHub,有次得到启发可能版本不同导致。 对比热更新正常的项目B的几个配置文件,重点查看package.json文件,发现有webpack版本不同。
377 0
vue-cli3+webpack热更新失效问题
|
存储 安全 API
ZYNQ-使用SD卡读写文本数据
ZYNQ-使用SD卡读写文本数据
728 0
ZYNQ-使用SD卡读写文本数据
|
NoSQL Redis 数据库
(六)、Redis持久化
(六)、Redis持久化
|
存储 SQL Java
数据库的数据类型
数据库的数据类型。
110 0
|
网络协议
网络TCP/IP基础(IP地址与子网划分)
IP地址、IP地址的格式、IP地址的分类、A类地址、B类地址、C类地址、其它地址、Internet上的IP地址、IP地址数制转换、二进制转十进制、十进制转二进制、子网划分、子网划分的原因、子网划分的原理、子网划分的应用
327 1
|
机器学习/深度学习 开发框架 算法
计算机专业毕业设计题目汇总-最新题目 选题 推荐 毕业设计 - 毕设指导 开题报告 论文
计算机专业毕业设计题目汇总-最新题目 选题 推荐 毕业设计 - 毕设指导 开题报告 论文,计算机专业毕业设计题目汇总-最新题目 选题 推荐 毕业设计 - 毕设指导 开题报告 论文,计算机专业毕业设计题目汇总-最新题目 选题 推荐 毕业设计 - 毕设指导 开题报告 论文
8265 0
计算机专业毕业设计题目汇总-最新题目 选题 推荐 毕业设计 - 毕设指导 开题报告 论文

热门文章

最新文章