i++与++i 递增递减运算符的前置与后置

C++Primer在132页的提示中说:除非必须,否则不用递增递减运算符的后置版本

很多教材都详细解释了递增递减运算符前置与后置的区别,我对他们的理解是:前置修改后直接赋值,而后置是先修改到临时变量,然后再赋值

下面的这份代码,第一个for循环使用后置版本,第二个使用前置版本,观察在实际使用中这两种样式的区别

for(int i=0;i<10;i++) cout<<i<<" ";
cout<<endl;
for(int i=0;i<10;++i) cout<<i<<" ";
cout<<endl;

运行结果:

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

输出结果完全相同,难道C++Primer在强行灌输作者的代码风格?

我们再来看一下下面这几行代码:

int i = 0,j  = 0;
cout<<i++<<" "<<++j<<endl;
cout<<i<<" "<<j;

运行结果:

0 1
1 1

现在意识到问题所在了么?上面提到了两种样式的工作方式,我们把他们写成伪代码,前置是i=i+1,而后置则是tmp=i+1,i=tmp

后置需要进行两倍于前置的操作次数,当然,也要消耗两倍的时间

原文地址:https://www.cnblogs.com/Ben-LaDeng/p/11324217.html

时间: 2024-10-06 14:46:48

i++与++i 递增递减运算符的前置与后置的相关文章

JavaScript运算符:递增递减运算符前置和后置的区别

从两段代码说起 var num1 = 2; var num2 = 20; var num3 = --num1 + num2; var num4 = num1 + num2; console.log(num1 +'-' + num2 +'-'+ num3 +'-' + num4) 将四个数分别打印是多少? var num1 = 2; var num2 = 20; var num3 = num1-- + num2; var num4 = num1 + num2; console.log(num1 +

C++ Primer笔记12_运算符重载_递增递减运算符_成员访问运算符

1.递增递减运算符 C++语言并不要求递增递减运算符必须是类的成员.但是因为他们改变的正好是所操作对象的状态,所以建议设定为成员函数. 对于递增与递减运算符来说,有前置与后置两个版本,因此,我们应该为类定义两个版本的递增与递减运算符. 问题来了,程序是如何区分前置和后置呢?因为都是++和-- 为了解决这个问题,后置版本的递增递减运算符接受一个额外的(不被使用)int类型的形参.当我们使用后置运算符时,编译器为这个形参提供一个值为0的实参.这个形参唯一的作用就是区分前置和后置运算符函数. 因为不会

C++ Primer笔记12_运算符重载_递增递减运算符_成员訪问运算符

1.递增递减运算符 C++语言并不要求递增递减运算符必须是类的成员.可是由于他们改变的正好是所操作对象的状态.所以建议设定为成员函数. 对于递增与递减运算符来说,有前置与后置两个版本号,因此.我们应该为类定义两个版本号的递增与递减运算符. 问题来了.程序是怎样区分前置和后置呢?由于都是++和-- 为了解决问题,后置版本号的递增递减运算符接受一个额外的(不被使用)int类型的形參.当我们使用后置运算符时,编译器为这个形參提供一个值为0的实參. 这个形參唯一的作用就是区分前置和后置运算符函数. 由于

PHP中的运算符---位运算符、递增递减运算符、三元运算符、字符串运算符、数组运算符、类型运算符、错误控制运算符

1.位运算符 位运算符用来对整型数的指定位进行置位,如果被操作数是字符串,则对该字符串的ASCII码值进行操作. 运算类型 运算符 举例 结果 按位与 & $a & $b 将$a 与 $b 中均为1的位置为1,其余置为0 按位或 | $a | $b 将$a 中为1 或$b中为1的位置为1,其余置为0 按位异或 ^ $a ^ $b 将$a 与 $b 中不同的位置为1,其余置为0 按位非 ~ ~ $a 将 $a 中为1的位置为0,为0的位置为1 左移 << $a <<

四.运算符(5)递增递减运算符

递增递减运算符 学习目标:理解递增和递减(++ --). <?PHP $a=5; $b=$a++;           //1.返回本身的值.2.把a值加1. 分析:$a第一次值 为5.   走到$b时 值是个$a++  先返回值5赋给$b ,所以$b值为5  .后来发生第二次变化,$a会自身加1,改变了原本的值  最后得到了新值 为6.   其它的计算也是这样. var_dump($a,$b);    // 6 5 // *$a-- ,--$a  自己可以偿试. $a=3; $b=++$a;

深入理解递增,前置与后置

当x++与++x独占一行是,它们的功能是相似的,都可以看做x=x+1; 当x++与++x嵌入在表达式里面的时候,x++是先x+1,在执行表达式:而++x是先执行表达式,再x+1. 例子 x=10; y=10; if(++x==11){}   True; if(y++==11){}   False; 深入理解递增,前置与后置

前置++与后置++运算符重载

前置++与后置++运算符重载,前置--与后置--运算符同理 complex& operator++(complex& c1) { c1.a++; c1.b++; return c1; } complex& operator++(complex& c1, int)//占位符区分前置还是后置 { complex temp = c1; c1.a++; c1.b++; return temp; } 原文地址:https://www.cnblogs.com/jly594761082/

前置及后置++,--

关于前置及后置++,-- a++ (temp=a,a+=1,temp) //由此看出后置++产生临时变量 ++a (a+=1,a) 所以在程序中出现a++=10,(a++)++,++(a++)等试图改变后置++的值,是错误(编译错误)的 前置及后置++的用法 1.遇到逗号结束: 如:int a=10; int c=(a++,++a,a++); printf("%d\n",c); 在VC6中打印c的值为12,这里的(a++,++a,a++);为逗号表达式,从左向右运算,遇逗号后置++进行

(转)前置++和后置++的区别

今天在阅读<google c++ 编程风格>的文档的时候,5.10. 前置自增和自减:有一句话引起了我的注意: 对于迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符.,理由是 前置自增 (++i) 通常要比后置自增 (i++) 效率更高.于是我查了查前置++和后置++的区别. 注意:<more effective c++>条款8也专门叙述了问题.后来我发现,下面的文章基本就是它的翻版,哈哈 前置++和后置++的区别 <C专家编程>中有如下描述(P276