我有一个自定义类MyInt,封装了一个int m_nValue数据.后缀运算符
MyInt operator++(int)
{
MyInt temp(*this);
++(*this);
return temp;
}
Run Code Online (Sandbox Code Playgroud)
如果运算符返回一个对象,那么为什么我不能多次调用postfix ++运算符,如:
MyInt value(10);
value++; // valid
value++++; // Why is this invalid?? Cant it be interpreted as (value++)++
Run Code Online (Sandbox Code Playgroud)
如果我可以调用MyInt类中定义的value.print()方法,为什么值++++会给出一个错误左值,那么我还应该能够做值+++?
错误的答案:
因为value++是一个保存旧值的临时变量value.你不能++.
你也写不出来15++!它很相似.前者是临时变量,后者是常量,没有一个可以递增.
更正:由于这个答案被接受了,我不会改变原来的帖子,但是由于人们会阅读它,我会在这里发布更正.
首先,我不是说常量和临时对象是相同的概念.我只是试图说临时对象不是l值,就像常量不是,没有实际使用单词l-value.
关于value++++,这不是一个错误.我只是用我的g ++ 4.5测试它,它工作正常.在其他答案中,您可以阅读:
从2003年标准的3.10.10节:
为了修改对象,对象的左值是必要的,除了在某些情况下也可以使用类类型的右值来修改它的指示对象.[示例:调用对象(9.3)的成员函数可以修改对象.]
你正在做的事情本质上是错误的是:
让我们说value等等10.第一个value++更改value为11但返回包含的临时对象10.然后你++将它更改临时值(你永远不会访问)11,但再次返回一个包含的临时对象10.所以value++++行为完全像value++除了做一些不必要的工作.
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |