广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中的自增与自减
  • 698
分享到

C++中的自增与自减

C++自增C++自减 2022-11-12 17:11:59 698人浏览 薄情痞子
摘要

目录1、自增与自减1.1 基本用法1.2 进阶理解1.3 差异1.4 指针自增、自减自增与自减是c++当中两个使用频率非常高的运算符,不仅在循环当中用到,在日常的代码当中也经常使用。

自增与自减是c++当中两个使用频率非常高的运算符,不仅在循环当中用到,在日常的代码当中也经常使用。

1、自增与自减

1.1 基本用法

自增与自减是C++当中两个使用频率非常高的运算符,不仅在循环当中用到,在日常的代码当中也经常使用。

甚至C++这个名称的由来都和自增运算符有关,表示C语言的升级版。当然这也是C#名字的由来,#这个符号表示4个叠加的加号……不得不吐槽这微软的恶趣味。

我们都知道自增有两种写法,一种是i++另外一种是++i。这两种写法对于i这个变量的最终结果来说是一样的,都是自增了1,但是对于自增这个操作的发生时间,则有很大的差异。

比如:


int a = 0, b = 0; 
cout << a++ << endl; 
cout << ++b << endl; 


最终我们得到的输出结果是0和1,差别就在执行自增的时间。对于cout << a++来说,它是先执行cout操作,再执行自增,而cout << ++b则相反,是先执行自增再执行cout

同理,我们在赋值的时候也是一样:


int a = 0, b = 0; 
int c = a++; 
int d = ++b; 

c和d得到的结果同样是一个为0,另外一个为1,原因和刚才一样。

以上的规则同样适用于自减。

1.2 进阶理解

现在我们知道了++i的执行顺序在i++之前,那么问题来了,那么它们两者的执行顺序究竟是怎样的?差异到底在哪里呢?

对此,C++当中有一个叫做顺序点的概念,顺序点指的是程序执行过程中的一个点。在C++当中语句中的分号就是一个顺序点,在程序处理下一条语句之前,赋值运算符、自增、自减运算符执行的所有修改都必须完成。除了分号之外,完整的表达式末尾也是一个顺序点。

完整表达式的概念有点费解,C++ Primer中的定义是不是另一个更大的表达式的子表达式,比如while循环中的检测语句就是一个完整表达式。

比如:


int cnt = 0; 
while (cnt++ < 10) cout << cnt << endl; 

程序的输出结果是:

我们可以看到它的输出结果从1开始,而并非从0开始。意味着我们在执行cout之前,cnt变量就已经完成了自增。这进一步说明了while(cnt++ < 10)本身就已经是一个完整表达式了。因此在这个表达式执行之前,C++就会完成自增的操作。

关于完整表达式还有一个坑点,就是它的执行顺序。

比如下面这个例子:


y = (4 + x++) * (6 + x++); 


由于(4 + x++)(6 + x++)都不是一个完整表达式,因此C++并不能保证x++的执行顺序,它没有规定是在每个子表达式计算之后执行自增,还是整个表达式计算之后再自增。它只能保证在执行到下一条语句之前x变量被自增两次,至于它的执行时间则无法保障。

因此,最好不要写出这样的代码,不仅可读性差,而且结果也可能不可靠。

1.3 差异

我们还有一个问题没有解决,在不影响结果的情况下,前缀的形式和后缀的形式究竟还有没有其他差别呢?

比如:


x++; 
++x; 
 
for (int i = 0; i < n; i++); 
for (int i = 0; i < n; ++i); 


我们现在知道它们的结果是一样的,但在内部执行是有细微差别的。差别在于后缀的形式会先生成一个拷贝值,再将拷贝值赋值给原值,而前缀的版本是直接在原值上修改。因此理论上来说,前缀版本的效率更高。当然这当中的差别非常细微,几乎可以忽略不计。

但是在面试当中很有可能会被问到,因此有所了解即可。

1.4 指针自增、自减

自增自减操作同样可以运用在指针上,前文当中介绍过,这表示指针的移动。自增表示向右移动一位,自减表示向左移动一位。

这很简单,但是当我们把一些操作符结合在一起就有些麻烦了。C++当中规定,前缀运算符和解引用运算符优先级相同,按照从右到左的方式结合,后缀运算符优先级更高,从左至右。

这意味着*++pt表示先执行指针自增操作,也就是移动一位之后,再解引用。

++*pt则意味着先解引用取得值,再对改值加1。

x=*pt++由于后缀符的优先级更高,意味着先执行指针移动,再解引用。如果大家实在搞不清楚的话,可以使用括号。

到此这篇关于C++中的自增与自减的文章就介绍到这了,更多相关C++自增与自减内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

注:文章转自微信公众号:Coder梁(ID:Coder_LT)

--结束END--

本文标题: C++中的自增与自减

本文链接: https://www.lsjlt.com/news/156200.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中的自增与自减
    目录1、自增与自减1.1 基本用法1.2 进阶理解1.3 差异1.4 指针自增、自减自增与自减是C++当中两个使用频率非常高的运算符,不仅在循环当中用到,在日常的代码当中也经常使用。...
    99+
    2022-11-12
    C++自增 C++自减
  • java中有哪些自增自减运算符
    这期内容当中小编将会给大家带来有关java中有哪些自增自减运算符,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客...
    99+
    2023-06-14
  • node.js Sequelize实现单实例字段或批量自增、自减
    一、单实例自增、自减 在Sequelize中,一个实例(Instance)表示数据库中的一行记录。Instance有两种:由Model.build()创建的非持久化实例,和由Model.create()等...
    99+
    2022-06-04
    字段 批量 实例
  • sybase自增与插入
    在Sybase数据库创建表时,对于自动增长字段的写法示例: ...
    99+
    2022-10-18
    职场 sybase 休闲
  • PostgreSQL --序列与自增id的秘密
    一、PostgreSQL的自增id serial 1.2、serial的本质 我们在创建表时,经常需要使用到自增id,往往这么写, create table test ( id serial, #...
    99+
    2022-10-18
    postgre sql postgresql
  • 第03期:列非空与自增
    MySQL 里字段的属性很多,对性能来说,影响也是可大可小,所以针对其属性这一块有必要进行一次探究。 一、NULL / NOT NULL NULL 对外部程序来说,具体为不知道、不确切的、无法表述的值。所以在很多家公司的开发规范里都明确规定...
    99+
    2019-04-20
    第03期:列非空与自增
  • mysql 自增量与唯一性约束
    当一张数据表经过多次的删除操作后,它的自增值列通过会很混乱,不美观,这时就需要我们对它进行重新排序,让他从新从1开始。操作方法:先删除数据表中的原id字段,然后再重新建立id字段删除id字段:alter t...
    99+
    2022-10-18
    mysql 自增量 唯一性约束
  • PHP基础语法之自加自减的使用方法
    小编给大家分享一下PHP基础语法之自加自减的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是自加自减:自加自减就是自己加1,自己减1关于自加自减运算符...
    99+
    2023-06-15
  • MySQL补充——获取自增主键的下一个自增值
    本文主要学习了如何获得自增主键的下一个值。 MySQL补充——获取自增主键的下一个自增值 摘要:本文主要学习了如何获得自增主键的下一个值。 格式 1 select auto_incremen...
    99+
    2017-05-27
    MySQL补充——获取自增主键的下一个自增值
  • mysql自增id超大问题的排查与解决
    引言 小A正在balabala写代码呢,DBA小B突然发来了一条消息,“快看看你的用户特定信息表T,里面的主键,也就是自增id,都到16亿了,这才多久,在这样下去过不了多久主键就要超出范围了,插入就会失败...
    99+
    2022-10-18
    mysql 自增 id
  • python 的自增运算符
    python 的自增运算符 博客分类: python python 的这段code: Python代码 >>> i =1 >>> ++i >>> print...
    99+
    2023-01-31
    运算符 python
  • 如何更改MySQL中的自增数?
    auto_increment 是一个默认属性,它会自动递增新添加的记录。 通过1. 使用alter命令可以更改起始数字。首先,使用insert命令创建一个表。具体操作如下 −mysql> CREATE table AutoIncrem...
    99+
    2023-10-22
  • mysql中自增id的示例分析
    这篇文章主要介绍了mysql中自增id的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。对于auto_increment的字段,比如:...
    99+
    2022-10-18
    mysql
  • MySQL主键自增的原因
    MySQL主键自增的原因?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!InnoDB引擎表的特点1、InnoDB引擎表是基于...
    99+
    2022-10-18
    mysql
  • phpmyadmin添加自增的方法
    小编给大家分享一下phpmyadmin添加自增的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!phpmyadmin如何添加自增?新建表,添加id字段phpmyadmin设置id自增(AUT...
    99+
    2022-10-18
    phpmyadmin mi %d
  • 自增列id是怎样的
    这篇文章将为大家详细讲解有关自增列id是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在使用MySQL建表时,我们通常会...
    99+
    2022-10-18
    id mysql
  • navicat设置自增的方法
    这篇文章主要介绍了navicat设置自增的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。打开navicat工具,连接上mysql服务器,选择...
    99+
    2022-10-18
    navicat ica
  • MySQL中的主键自增机制详情
    目录主键自增自增主键保存在哪里自增值修改机制自增值的修改时机如何修改自增主键值主键自增 mysql 提供了主键自增机制 AUTO_INCREMENT. 对主键使用, 保证了主键的唯一性. 注意:自增长必须与主键字段配合使...
    99+
    2022-08-26
    MySQL主键自增机制 MySQL主键自增
  • 删除mysql中自增主键的方法
    小编给大家分享一下删除mysql中自增主键的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!删除mysql中的自增主键的方法:首先需要删除auto_increment;然后执行【alter ...
    99+
    2022-10-18
    mysql
  • MySQL中自增主键的示例分析
    这篇文章主要介绍了MySQL中自增主键的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、自增值保存在哪儿?不同的引擎对于自增值的保...
    99+
    2022-10-18
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作