C/C++中的UB
一般而言的UB即未定义行为(Undefined Behavior),区别于未指定行为(Unspecified Behavior)。简单来说,前者是对bad-formed的程序而言,该程序的写法违反了C/C++标准;后者对well-formed的程序而言,该程序写法没有违反标准,只是标准提供了多种可选方案,但具体实现看编译器。具体可参见C99标准中关于程序behavior的定义。UB对程序来说可能出现任意行为,轻则出现意料之外的结果,重则程序崩溃,应该极力避免。
C/C++中常见的UB有:
整数溢出
序列点(Sequence Points)
违反了著名的Strict Aliasing规则
序列点
所谓序列点,C99定义如下:
At certain specified points in the execution sequence called sequence points, all side effects of previous evaluations shall be complete and no side effects of subseque
...