Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Не срезайте.
Основные рекомендации по 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) {
// ...