Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ne szeletelje.
C++ alapvető irányelvek: ES.63: Ne szeletelje
A nyelv lehetővé teszi a szeletelést , és egy veszélyes implicit szereposztás különleges eseteként tekinthető meg. Még ha szándékosan teszik is, és nem okoz azonnal problémákat, akkor is erősen nem ajánlott. Ez megnehezíti a kód módosítását azáltal, hogy további követelményeket kényszerít a kapcsolódó adattípusokra. Különösen igaz, ha a típusok polimorfikusak, vagy erőforrás-kezelést igényelnek.
Megjegyzések
Ez a szabály nem csak explicit hozzárendelésekre, hanem implicit szeletelésre is figyelmeztet. Implicit szeletelés akkor történik, ha a rendszer visszaad egy eredményt az aktuális függvényből, vagy amikor adatokat ad át más függvények számára.
A szabály megjelöli azokat az eseteket is, amikor a hozzárendelés nem jár valós adatszűréssel (például ha a típusok üresek, vagy nem okoznak veszélyes adatmanipulációt). Ezeket a figyelmeztetéseket továbbra is ki kell javítani, hogy megakadályozzák a nemkívánatos regressziókat, ha az adattípusok vagy viselkedések a jövőben megváltoznak.
példa
A következő kód példában elolvassuk id_ex, de a függvény hívója csak az objektum egy szeletét kapja meg:
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;
}
A probléma megoldásához frissítse a függvényt a megfelelő típusok használatára:
// ...
bool read_id(stream &s, id_ex &v) {
// ...