繁体   English   中英

在C ++中是`x-> 0 && array [x]`明确定义的行为?

[英]Is `x— > 0 && array[x]` well-defined behavior in C++?

当我在左侧后增加它时,我可以在布尔表达式的两侧使用x吗?

有问题的一行是:

 if(x-- > 0 && array[x]) { /* … use x … */ }

这是通过标准定义的吗? 将数组[X]使用的新值x或旧的?

这取决于。

如果&&是通常的短路逻辑运算符,那么它很好,因为它有一个序列点。 array[x]将使用新值。

如果&&是用户(或库)定义的重载运算符,则没有短路,也不保证x--的评估与array[x]的求值之间的序列点。 鉴于您的代码,这看起来不太可能,但如果没有上下文,则无法确定。 我认为通过仔细定义array ,可以按照这种方式进行排列。

这就是为什么重载operator&&几乎总是一个坏主意。

顺便说一句, if ((x > 0) && array[--x])具有非常相似的效果(同样,假设没有运算符重载shenanigans),并且在我看来更清楚。 不同之处在于x是否会在0之后递减,您可能会或可能不会依赖它。

是的,它定义明确。 &&引入了一个序列点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM