C++ 这个关系表达式不等于定义良好的表达式吗?

C++ 这个关系表达式不等于定义良好的表达式吗?,c++,C++,考虑一个类Foo,其中Foo是一个实例 Foo有一个函数calculate(),用于更改内部成员,该成员的watermark()是“getter”,并返回与该内部成员类型相同的内容 这是一个表达 foo.calculate() != foo.watermark() 定义明确。也就是说,必须在调用watermark()之前执行calculate() 换句话说,评估顺序是严格的foo.calculate(),然后是foo.watermark(),然后是=?它可能有助于: 几乎所有C++操作符的操作

考虑一个类
Foo
,其中
Foo
是一个实例

Foo
有一个函数
calculate()
,用于更改内部成员,该成员的
watermark()
是“getter”,并返回与该内部成员类型相同的内容

这是一个表达

foo.calculate() != foo.watermark()
定义明确。也就是说,必须在调用
watermark()
之前执行
calculate()

换句话说,评估顺序是严格的
foo.calculate()
,然后是
foo.watermark()
,然后是
=

它可能有助于:

几乎所有C++操作符的操作数的顺序(包括函数调用表达式中函数参数的顺序和在任何表达式中的子表达式的求值顺序)未指定。编译器可以按任意顺序计算操作数,并且可以在再次计算同一表达式时选择另一个顺序

这可能有助于:

几乎所有C++操作符的操作数的顺序(包括函数调用表达式中函数参数的顺序和在任何表达式中的子表达式的求值顺序)未指定。编译器可以按任意顺序计算操作数,并且可以在再次计算同一表达式时选择另一个顺序


两者之间没有顺序点,评估顺序未指定

您必须强制执行序列,例如:

const auto& res = foo.calculate();
res != foo.watermark();

两者之间没有顺序点,评估顺序未指定

您必须强制执行序列,例如:

const auto& res = foo.calculate();
res != foo.watermark();
<> >强> C++标准(ISO/IEC 1488~2014)说:< /强>

之前排序的是一种不对称的、可传递的、成对的关系 在单个线程执行的求值之间,这会导致 这些评估中的偏序。给定任意两个评估A和 B、 如果A在B之前排序,则A的执行应在B之前 如果A未在B之前排序,且B未排序,则执行B. 在A之前排序,然后A和B不排序。评价A和 当A在B之前排序或 B在A之前排序,但未指定哪个。

不允许同一标量对象出现在未排序或不确定排序操作的两半中的副作用或值计算中

参考链接。

< P> <强> C++标准(ISO/IEC 1488~2014): 之前排序的是一种不对称的、可传递的、成对的关系 在单个线程执行的求值之间,这会导致 这些评估中的偏序。给定任意两个评估A和 B、 如果A在B之前排序,则A的执行应在B之前 如果A未在B之前排序,且B未排序,则执行B. 在A之前排序,然后A和B不排序。评价A和 当A在B之前排序或 B在A之前排序,但未指定哪个。

不允许同一标量对象出现在未排序或不确定排序操作的两半中的副作用或值计算中


参考链接。

两者之间没有顺序点,评估顺序未指定。两者之间没有顺序点的清除重复,评估顺序未指定。清除重复