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