中易网

c++中++前缀和后缀有什么区别

答案:3  悬赏:20  
解决时间 2021-04-28 17:13
  • 提问者网友:全員惡人
  • 2021-04-27 22:36
c++中++前缀和后缀有什么区别
最佳答案
  • 二级知识专家网友:青灯壁纸妹
  • 2021-04-27 22:55
语义上的区别 :
也就是返回值行为不一样, 前置会返回加后的值,而后置则返回加之前的值。

编译器行为的区别 :
后置的时候为了能够返回加之前的值,编译器会给你构造一个临时变量用于参与整个表达式,编译器无法先计算整个表达式,再对这里二次计算一下,所以在一些情况下:比如该变量类型的构造会产生性能问题的时候,要适当考虑,比如独立的++i和i++,一些静态检查。
全部回答
  • 1楼网友:樣嘚尐年
  • 2021-04-28 01:23
存 在两种递增和递减操作符前置版本和后置版本幸运的是重载的递增和递减操作符的前 置和后置实例都可以被定义前置操作符的声明看起来就像你所期望的那样 class screenptr { public: screen& operator++(); screen& operator- - (); // ... }; 为区分后置操作符与前置操作符的声明重载的递增和递减后置操作符的声明有一个额 外的int 类型的参数在下面的例子中它声明了screenptr 类的前置和后置操作符对 class screenptr { public: screen& operator++(); // 前置操作符 screen& operator- - (); screen& operator++(int); // 后置操作符 screen& operator- - (int); // ... };
  • 2楼网友:转身→时光静好
  • 2021-04-27 23:47
class NewInt { public: NewInt():RootInt(0){}; NewInt(int IniInt):RootInt(IniInt){}; NewInt& operator++() { cout<<"prefix"<<endl; this->RootInt+=1; return *this; } NewInt operator++(int) //后缀,对参数(int)不要疑惑,int没有实质的作用,仅仅是为了区别前缀方式,标志这个++操作符是后缀形式 { cout<<"postfix"<<endl; NewInt preNum = *this; //后缀递增操作中,先要保存原对象到一个对象中这里采用的前缀式中方法; ++(*this); //然后对原对象进行递增操作 ; return preNum; //最后返回原来保存的元对象。 } private: int RootInt; }; 调试代码: [cpp] view plaincopy NewInt DBInt1(12) ; ++DBInt1; cout<<DBInt1.getRootInt()<<endl; cout<<"-----**------"<<endl; DBInt1++; cout<<DBInt1.getRootInt()<<endl; 程序输出: [cpp] view plaincopy prefix 13 -----**------ postfix prefix 14 Press any key to continue 以上程序基本验证了开头对递增前缀式和后缀式的理解,源码的方式更清晰了。在前缀的后缀都可以选择的时候,通过以上源码可以略知一二了,后缀表达式会产生一个额外的对象,并涉及到复杂的复制拷贝函数的设定等问题,所以,能用前缀式的递增尽量用前缀式的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息