#include <iostream>
int main() {
int a[] = { 21, 213, 45 };
static_assert(a[22], "error for a\n");
return (0);
}
Имам справочна таблица, оформена като масив от int
, трябва да проверя по време на компилиране дали използването на оператора []
може евентуално да доведе до четене, което е извън обхвата.
Знам, че static_assert
се нуждае основно от 2 неща:
- постоянен израз
- даденият израз трябва да върне
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