共用方式為


警告 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) {
// ...