static_assert С++ проверка ошибок на этапе компиляции

1) Ключевое слово static_assert служит для проверки и выброса сообщений на ошибки на этапе компиляции, введено в С++11 и изменено в С++17.


static_assert( bool-constexpr , message )		// (начиная с C++11)
static_assert( bool-constexpr )                 // (начиная с C++17)
/* Где:
bool-constexpr - логическое выражение возвращающее true или false (не ноль и ноль соответственно, для целочисленных значений)
message - выбрасываемое сообщение

2) Выбрасывание ошибки при компиляции и использовании static_assert происходит если (условие (bool-constexpr) равно false или 0

3) Польза от использования static_assert состоит именно в том, что ошибку можно обнаружить на этапе компиляции (об этом и говорит слово static в наименовании) и не произойдет (пользователь не увидит) аварийного завершения программы. Но static_assert можно применить только к условиями которые известны на этапе компиляции и поэтому не подходит для всех случаев, например когда условия известны только на этапе выполнения программы - зависят от действий пользователя или приходящей информации по сети, USB и т.д..


int main() {
  const int SIZE = 10;
  static_assert(SIZE < 5, "SIZE too big");  // C++11 Произойдет ошибка при компиляции
  static_assert(0);                         // C++17 Произойдет ошибка при компиляции
}
2023-10-22



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

not оператор С++ альтернативный "Логическое Не" !
not_eq оператор С++ альтернативный "НЕ РАВНО" !=
operator C++ перегрузка операторов в классе
or альтернативное наименование оператора || (Логическое ИЛИ)
or_eq альтернативное наименование оператора |= (Побитовое ИЛИ)
reinterpret_cast С++ оператор приведения типов
sizeof С++ оператор возвращающий размер переменной или типа данных в байтах
static_assert С++, С++ проверка ошибок на этапе компиляции
static_cast С++ оператор приведения типов
xor C++ оператор альтернативный ^ (побитовому исключающему ИЛИ)
xor_eq C++ альтернатива оператору ^= (Исключающее ИЛИ равно)