【发布时间】:2013-12-20 12:22:42
【问题描述】:
#include <iostream>
#include <type_traits>
int main(){
//creating an integral constant with constexpr
constexpr unsigned int speed_of_light{299792458};
//creating an integral constant with std::integral_constant
typedef std::integral_constant<unsigned int, 299792458> speed_of_light_2;
//using them
std::cout << speed_of_light/2 << '\n';
std::cout << speed_of_light_2::value/2 << '\n';
}
std::integral_constant 有什么特别之处,我会选择使用它而不是 constexpr?
他们的行为和用例看起来和我一模一样。我正在尝试考虑某种模板场景,其中 constexpr 可能不够。
【问题讨论】:
-
我从来不理解
std::integral_constant的用例是用于制作整数常量。这是用于各种事物的 TMP 功能,尤其是标签调度(通常基于其专业化std::true_type和std::false_type),不能使用常量值。当然对于常量使用实际常量而不是一些奇怪的典型常量。
标签: c++ templates c++11 constants constexpr