C28753
警告 C28753:依賴未定義的參數評估順序
C/C++可讓編譯程式產生程式代碼,以任何順序評估實際參數,而 x86 和 Arm 編譯程式通常會選取不同的順序。 依賴特定順序的程式代碼在不同平台上的行為可能會不同。
常見的錯誤是使用智慧型指標,其中運算符位址 & 有副作用,如以下的呼叫:
sp->Foo(&sp);
對成員存取運算子的呼叫 -> 和運算子 & 可能依任一順序發生。 因此,在呼叫運算符 之前或之後,可能會發生運算子 & 的副作用 ->。 此警告會尋找這些 Buggy 呼叫,以防止平台間的不同行為。
下列程式代碼範例會產生這個警告。
sp->Foo(&sp)
下列程式代碼範例會避免這個警告。
SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;