C28753

警告 C28753:依赖参数的未定义计算顺序

C/C++允许编译器生成代码以任意顺序评估实际参数,x86 和 Arm 编译器倾向于选择不同的顺序。 依赖于特定顺序的代码在不同平台上的行为可能不同。

一个常见的错误是使用智能指针,其中地址运算符 & 有副作用,在如下所示的调用中:

sp->Foo(&sp);

对成员访问运算符的调用 -> 和运算符 & 可能按任一顺序发生。 因此,运算符 & 的副作用可能发生在运算符 之前或之后 - 调用>。 此警告查找这些 buggy 调用,以防止平台之间的不同行为。

示例

下面的示例生成此警告。

sp->Foo(&sp)

下面的代码示例避免出现此警告。

SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;