警告 C26437
請勿配量。
C++ 核心指導方針 : ES.63:不要配量
語言允許 切割 ,並可視為危險隱含轉換的特殊案例。 即使它是故意完成的,而且不會導致立即的問題,它仍然非常氣氣。 藉由強制對相關資料類型的額外需求,它可讓程式碼更難變更。 如果類型為多型或涉及資源管理,則特別如此。
備註
此規則不僅會在明確指派上發出警告,也會在隱含配量上發出警告。 當結果從目前函式傳回,或資料傳遞至其他函式時,就會發生隱含切割。
此規則也會標幟指派不涉及實際資料切割的情況(例如,如果類型是空的,或不會進行任何危險的資料操作)。 如果資料類型或行為在未來發生變更,仍應修正這類警告,以防止任何不想要的回歸。
範例
在下一個程式碼範例中,我們會讀取 id_ex
,但函式的呼叫端只會取得 物件的配量:
struct id {
int value;
};
struct id_ex : id {
int extension;
};
bool read_id(stream &s, id &v) {
id_ex tmp{};
if (!s.read(tmp.value) || !s.read(tmp.extension))
return false;
v = tmp; // C26437
return true;
}
若要修正此問題,請更新 函式以使用正確的類型:
// ...
bool read_id(stream &s, id_ex &v) {
// ...
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應