none
求助关于递增递减运算符(++,- -)重载的问题 RRS feed

  • 问题

  • 定义递增递减运算符重载函数时,根据作前缀后缀的不同用法不同定义了两个函数,下面是两个重载函数声明:

    aClass& operator ++ ();

    const aClass operator ++ (int);

    问编译器是如何根据value++或++value来选择合适的重载函数的?还有书上说第二个声明中的int仅起区别作用,我想知道这是给编译器区别两个重载函数的吗?原理是什么呢?还有第二个声明中的const是用来做什么的?

    2013年8月5日 3:16

答案

  • Hi PrinciplerX,

          在重载操作符时,编译器是通过检查操作数类型来区分是前缀运算符还是后缀运算符。为了区分前置式和后置式,规定后置式有一个int操作数类型,编译器会为该int初始化一个0值。

     自增和自减操作符的前置式和后置式返回不同的型别:前置式返回一个reference,后置式返回一个const对象。后置式返回一个const对象?是为了防止如下行为的出现:

         int i = 4;

    i++++;  // 错误,但++++i合法

     以下是关于操作符重载和编译器和连接器的原档信息,希望对你深入学习有帮助:

    http://msdn.microsoft.com/en-us/library/5tk49fh2.aspx

    http://msdn.microsoft.com/en-us/library/aa984716(v=VS.71).aspx

    Best Regards!

    May


    May Wang<br/> MSDN Community Support | <a href="mailto:msdnmg@microsoft.com">Feedback to us</a><br/> <a href="http://blogs.msdn.com/b/win8devsupport/"><font color="red">Develop and promote your apps in Windows Store</font></a><br/> Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年8月6日 8:55