作者TimeString (时弦)
看板b96902HW
标题Re: [JAVA] C的加加减减
时间Fri Mar 21 01:18:32 2008
※ 引述《hikaru4 (光)》之铭言:
: 老师今天上课有提到一些++--的特别使用方式
: 虽然用到的机会应该真的不多但是我还是测试了一下
: 不过居然不管是 ++++i ----i i++++ i---- ---i
: 都会在编译时就出现错误讯息
: error: invalid lvalue in decrement
: 不过这错误讯息实在有看没有懂
: 有人可以帮忙解释一下吗?
: 依稀记得上学期绿牡蛎跟c助教好像讲过类似的东西
: 可是我忘记详细内容了 有人知道吗?
科科科
先说一下我实验的结果吧
如果你是用 C++,那麽 --i,----i,--++--++++--i 都可以编译过,
但是 i---- 不行。一个变数的後面只能放一组 ++ 或 --。
再看一个比较 tricky 的例子,++++i-- compile 不过,
但是 (++++i)-- 就可以过了~
另外,不能 ---i,要 -(--i)。
回到正题吧,lvalue 的原来意思是 "left hand side value" (of an assignment),
他有这个特性,就是可以被设值。
譬如说:
int a;
a = 7;
那麽
a 就是一个
lvalue,因为他可以被设值。
又譬如说,你不可以这样打:
int a, b;
3 = 7;
2 + 2 = 7;
a + b = 7;
很明显的,
3,
2 + 2 以及
a + b 根本就不能设值,
所以这三样东西是 non-lvalue。
以上是我确定的,接下来就是我的猜测了。
在 C 里的 ++, --(不论放在变数前或变数後),
他要求这个变数要为 lvalue。
也就是说
++9 是不合法的。
但是这个 lvalue 运算完的结果是一个数字,刚刚讲过数字不是 lvalue。
假设我们有这样的程式码:
a = 8;
--++a;
那麽 compiler 应该会这样解读:
--++a // a 是个 lvalue,如果执行的话 a 会变 9,并且
把 ++a 用 9 替代。
↓
--9 // 哈哈错了吧
这就是为什麽 compiler 会出现 invalid lvalue 这个错误讯息。
参考资料:
http://www.velocityreviews.com/forums/t279868-what-is-lvalue.html
(请注意这网站是在介绍 C++ 的 ++, --)
--
心情放松摇摆 在你三百米之外
数着心跳等待 所有念头全抛开
锁进来 进来 这美丽的悲哀
这是爱 就是爱 全世界都不明白
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.71.207.153
1F:推 woptspencil:不愧是木木 03/21 01:25
2F:推 jyt0532:强者天下 03/21 01:47
3F:推 luke77222:hikaru问的应该是ansi c,超过两个就不会过. 03/21 01:55
4F:推 nypgand1:有没有签名档的八卦 03/21 03:11
5F:推 hikaru4:感谢~相当详细啊!! 03/21 06:54
6F:推 david00129:.......感觉自己突然矮了一大截 03/22 00:23
7F:推 wolfdigit:木木好威! 有没有签名档的八卦 03/22 14:26
8F:推 strangechu:木木木木木木木木 03/22 17:01
9F:推 Danielviolin:谢谢木木木指导^^ 03/22 20:32
10F:推 scan33scan33:在C++里的话怎样写都会过,因为他一定return 03/25 09:07
11F:→ scan33scan33:reference 03/25 09:08