#include <iostream>
int main() {
int a[] = { 21, 213, 45 };
static_assert(a[22], "error for a\n");
return (0);
}
我有形狀象int
陣列的查找表,我需要在編譯時是否使用了[]
操作的可能可能導致讀取超出範圍。當[]運算符失敗時會發生什麼,我需要一個斷言?
我知道一個static_assert
需求基本上由兩個部分:
- 常量表達式
- 給定的表達式應該返回一個
bool
或g++ 4.8.1
可轉換/相當於bool
現在一個initializer_list
應該是C++ 11中的一個常量表達式,並且我不知道有多少次我看到了像這樣編寫的if
構造是if(arr[N]){...}
;所以這個斷言有什麼問題?
的靜態斷言必須是在編譯時解析的參數。 'a'是一個'ints'的數組,'a [22]'返回一個'int',直到運行時纔會知道它的值。它超出界限的事實不會阻止你檢查它。 基本上,無論數組訪問是否超出限制,幾乎總是隻能在**運行時才知道,所以這在一個不適合static_assert的地方。 –