|
发表于 2009-11-4 01:11:35
|
显示全部楼层
IP:江苏扬州
跟你解释一下:
++(++n); 这个式子, 对于 那个 带 & 的函数来讲, 参与运算的是对象本身, 返回的也是该对象本身, 所以你看到的结果是两次++ 的结果。
现在你把那个函数中的 & 去掉, 那么当你(++n) 运算的时候, 参与运算的虽然确实是该对象本身, 但是当你返回该对象时, 返回的却是一个该对象的copy, 也就是说该对象并没有参与那个括号外的 ++ 运算, 参与那个括号外的 ++ 运算的是该对象的一个copy. 所以该对象本身的值只增加了一次.
问题的根本其实就是 传值 和 传对象的区别, 这里的传 有两个方面, 一个方面是有可能在函数入口端发生, 另一种发生的可能性是函数的出口端, 就你的问题就是 函数出口端 发生的 传值 和 传对象 的问题.
总结如下, 如果你在函数入口端使用 引用(&) 或地址(*) 那么将是对象本身参与工作, 反之, 参与工作的是另一个临时变量.
如果你在函数出口端使用 引用(&) 或地址(*) 那么将返回对象本身, 反之, 将返回一个该对象的copy. |
|