#include <iostream>
int main() {
int a[] = { 21, 213, 45 };
static_assert(a[22], "error for a\n");
return (0);
}
У меня есть таблица поиска в виде массива int
, мне нужно проверить во время компиляции, может ли использование оператора []
привести к чтению, выходящему за рамки.
Я знаю, что static_assert
нужны в основном две вещи:
- постоянное выражение
- данное выражение должно возвращать
bool
или быть конвертируемым/эквивалентнымbool
Теперь в g++ 4.8.1
initializer_list
должно быть константным выражением в C++11, и я не знаю, сколько раз я видел конструкцию if
, написанную вот так if(arr[N]){...}
; так что не так с этим утверждением?
a
представляет собой массивints
,a[22]
возвращаетint
, значение которого не будет известно до времени выполнения. Тот факт, что это за пределами, не помешает вам изучить его. По сути, почти всегда будет известно, находится ли доступ к массиву за пределами границ, только во время выполнения, так что это неподходящее место для static_assert. - person Grimm The Opiner   schedule 10.12.2013