Что нужно знать о constexpr (комментарии)
Это сообщение сгенерировано автоматически.
Еще оно может вычисляться во время компиляции, если значение, возвращаемое функцией, можно посчитать в compile-time, а не run-time
#include <iostream> constexpr int F(){ return 5;} int main( int argc, char const *argv[]) { int b[F( )]; std::cerr<<"sizeof(int) == "<<sizeof( int)<<"; sizeof(int b[F()]) =="<<sizeof( b)<<'\n'; return 0; }
Вывод: sizeof(int) == 4; sizeof(int b[F()]) ==20
и все выглядит читаемо, раньше аналогом этого был ужас с шаблонами и енумами. :)
TakeOver
Так для этого constexpr и существует. Заметка подразумевает, что читатель знает о constexpr, но не до конца понимает его. А так, да, действительно бывает удобно в некоторых местах использовать constexpr, например что-нибудь такое:
template <typename K, typename V> class map { static constexpr int bucket_size = 8; static constexpr int max_key_size = 128; static constexpr int max_value_size = 128; static constexpr bool indirect_key() { return sizeof( K) > max_key_size; } static constexpr bool indirect_value( ) { return sizeof( V) > max_value_size; } struct map_bucket { typedef typename std::conditional<indirect_key( ), K*, K>::type KK; typedef typename std::conditional<indirect_value( ), V*, V>::type VV; uint8 top_hash[bucket_size]; map_bucket *overflow; KK keys[bucket_size]; VV values[bucket_size]; }; ... };
Тема в архиве.