【发布时间】:2011-05-20 17:39:23
【问题描述】:
operator = 不是序列点有什么好的理由吗?在 C 和 C++ 中。
我很难想出一个反例。
【问题讨论】:
-
这将需要编译器在 RHS 之前计算 LHS。为什么要创建这种限制?
-
一般来说,事情需要一个理由来成为一个序列点。他们不需要理由不成为序列点;这是默认设置。
-
&& 是一个序列点,因为它允许像
ptr && ptr->data这样的成语工作。相反,因为标准要求&&具有短路行为:标准规定如果左侧评估为假,则右侧根本不能评估 .因此,不允许先评估右侧,以防左侧为假。 :) -
看。使用
=,您必须同时评估左侧和右侧,然后进行分配(只是“评估”每一侧的规则有些不同 - 左值与右值等)。但是没有理由你必须先评估左侧,然后再评估右侧,反之亦然——只要你在实际分配之前两者都做。对于&&,您必须评估左侧在右侧,因为可能根本不必须评估右侧. -
@Karl 哦,对。好的,很酷,你能把它写成答案吗?
标签: c++ c sequence-points