閱讀英文

共用方式為


C28753

警告 C28753:依賴未定義的參數評估順序

C/C++可讓編譯程式產生程式代碼,以任何順序評估實際參數,而 x86 和 Arm 編譯程式通常會選取不同的順序。 依賴特定順序的程式代碼在不同平台上的行為可能會不同。

常見的錯誤是使用智慧型指標,其中運算符位址 & 有副作用,如以下的呼叫:

sp->Foo(&sp);

對成員存取運算子的呼叫 -> 和運算子 & 可能依任一順序發生。 因此,在呼叫運算符 之前或之後,可能會發生運算子 & 的副作用 ->。 此警告會尋找這些 Buggy 呼叫,以防止平台間的不同行為。

範例

下列程式代碼範例會產生這個警告。

sp->Foo(&sp)

下列程式代碼範例會避免這個警告。

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