这种关系不等于定义良好的表达式吗?
Is this relational not equal to expression well defined?
考虑一个类Foo
foo
是其中的实例。
Foo
有一个函数calculate()
,该函数更改watermark()
是其"getter"的内部成员,并返回与该内部成员类型相同的内容。
是表达式
foo.calculate() != foo.watermark()
定义明确。也就是说,calculate()
必须在watermark()
被召唤之前发生吗?
换句话说,评价顺序是严格foo.calculate()
,后跟foo.watermark()
后跟!=
吗?
两者之间没有顺序点,评估顺序未指定。
您必须强制序列,例如:
const auto& res = foo.calculate();
res != foo.watermark();
C++标准(ISO/IEC 14882:2014(说:
之前排序的是一种不对称的、传递的、成对的关系 在单个线程执行的评估之间,这会导致 这些评价中的部分顺序。给定任意两个评估 A 和 B,如果 A 在 B 之前排序,则 A 的执行应先于如果 A 未在 B 之前排序且 B 未排序 在 A 之前排序,然后 A 和 B 未排序。评价 A 和 当 A 在 B 之前排序或 B 在 A 之前排序,但未指定哪个。
不允许同一标量对象出现在未排序或不确定排序操作的两半的副作用或值计算中。
参考链接在这里。
它可能会有所帮助: http://en.cppreference.com/w/cpp/language/eval_order
未指定几乎所有C++运算符的操作数的计算顺序(包括函数调用表达式中函数参数的计算顺序和任何表达式中子表达式的计算顺序(。编译器可以按任意顺序计算操作数,并且可以在再次计算同一表达式时选择其他顺序。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- 对于结构,表达式必须是可修改的ivalue
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 将fold表达式与std::一起用于两个元组
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 标记 '","' 之前的预期主表达式
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++GTKMM gui循环依赖关系
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 这种关系不等于定义良好的表达式吗?
- 是否可以将多个关系表达式放入 for 循环的测试条件中
- c++条件语句是否带有从条件表达式到语句的依赖关系?
- 逻辑/关系表达式优化