2010-12-07 68 views
2

GCC是给我无效的左值在分配错误的:gcc困惑什么是左值?

-2[(size_t *)new] = 0; 

代码更改为下面的操作就走开:

((size_t *)new)[-2] = 0; 

但据我所知道的,都是100%等价于C. gcc在非左值表达式中使用前者是没有问题的。这仅仅是gcc中的一个错误?我已经测试了几个版本,并得到了相同的结果。

+1

每当我想我知道C,我看到这样的东西,去“wtf?” – 2010-12-07 15:42:35

+0

我知道有可能像这样访问数组,但我从来不知道有人真的这样做...... – musiKk 2010-12-07 15:47:36

回答

7

我很笨。 []-更紧密,所以这个表达式实际上是读取索引2并且否定它。