c++ - 为什么对原始类型的操作是无序的而不是不确定的顺序?

标签 c++ c++11 undefined-behavior sequence-points

如果i是一个 int , 类似 ++i + ++i 的表达是未定义的行为,因为有 2 个未排序的修改 i .但是,如果 i是一些int -类,++i + ++i相反具有不确定顺序的修改,因此是定义的行为(在这种情况下具有确定性结果)。是否存在这样一种情况,即对基元的操作是无序的而不是不确定的顺序会更好?如果是这样,为什么这种情况不适用于用户创建的类型?如果不是,为什么原始操作根本没有顺序?

最佳答案

一般来说,“未排序”的越多越好。

在 C++ 中不可能使两个函数交错运行。因此,不可能交错运行两个 operator++ 实现。

因此,对于实现 operator++ 的类类型,这是不确定的顺序。

关于c++ - 为什么对原始类型的操作是无序的而不是不确定的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15745889/

相关文章:

c++ - unique_ptr : linked list entry deletion

C++ 读写同一个类的多个对象

c++ - 在包含自定义类型的集合中查找

c++ - 将传递的参数限制为字符串文字

c++ - 如何解决忙等待许多正在运行的线程

c++ - boost::asio::io_service 在 win_mutex 锁中崩溃

c++ - auto && outside range-for

c++ - 未定义的行为和顺序点

arrays - 动态数组的惯用初始化是否会调用未定义的行为?

c++ - 约后 APPCRASH 40 秒