C26437 DONT_SLICEC26437 DONT_SLICE

« Ne pas découper »."Do not slice."

Les instructions C++ Core:C++ Core Guidelines:
ES.63 : Ne pas découper.ES.63: Don't slice

Le découpage est autorisé par le compilateur et peut être considéré comme un cas spécial de cast implicite dangereuse.Slicing is allowed by compiler and can be viewed as a special case of dangerous implicit cast. Même si elle est volontaire et n’entraîner des problèmes d’exécution, il est toujours fortement déconseillé, car elle rend le code impossible à maintenir plutôt en forçant les exigences supplémentaires sur les types de données associées.Even if it is done intentionally and doesn’t lead to immediate issues, it is still highly discouraged since it makes code rather unmaintainable by forcing additional requirements on related data types. Cela est particulièrement vrai si les types sont polymorphes ou impliquent la gestion des ressources.This is especially true if types are polymorphic or involve resource management.

NotesRemarks

  • Cette règle serait avertit pas uniquement sur les affectations explicites, mais également sur le découpage implicite qui se produit lorsque le résultat obtient retourné à partir de la fonction actuelle ou les données passées comme arguments à d’autres fonctions.This rule would warn not only on explicit assignments, but also on implicit slicing which happens when result gets returned from current function or data passed as arguments to other functions.
    • Avertissements seraient également signaler les cas où l’attribution n’implique pas de séparation des données réelles (par exemple, si les types sont vides ou ne faites pas toutes les manipulations de données dangereuses).Warnings would also flag cases where assignment doesn’t involve real data slicing (e.g. if types are empty or don’t make any dangerous data manipulations). Ces avertissements doivent être traités pour empêcher les régressions indésirables si les données de types ou comportement change dans les futures.Such warnings should still be addressed to prevent any undesirable regressions if types data or behavior changes in future. ## ExempleExample points de découpage pour obsolètesslicing points to outdated
interface
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;
}

ExempleExample

points de découpage pour obsolètesslicing points to outdated

interface - corrected
// ...
bool read_id(stream &s, id_ex &v) {
// ...