struct BLA
{
int size_;
int size()const{ return size_; }
}
int x;
BLA b[ 2 ];
BLA * p = &b[ 0 ];
b[ 0 ].size_ = 4;
b[ 1 ].size_ = 6;
当我编译这一行时:
x = p->size_ + (p++)->size_;
我收到了预期的结果。但是,当我编译这行时(没有前一行):
x = p->size() + (p++)->size();
然后我得到不同的结果。 'p'不会与上一行同时增加。有人可以解释一下吗?试过VS 2008和VS 2010。
答案 0 :(得分:5)
在没有插入序列点的情况下单独读取和修改变量是未定义的行为。你已经看到了一个很好的例子。
答案 1 :(得分:1)
在我编译代码时,在我的两个案例中x都是8。两者分别使用,并结合使用。我想要注意的是,使用p ++被认为是未定义的行为,它向我发出警告的那一行是该行。
然而,编译器警告我warning: operation on 'p' may be undefined
。
编辑:我想在这种情况下注意正确的指针算法:x = p->size_ + (p+1)->size_;
。