很多地方很难通过手撸的
打个比方
double f(double x) const noexcept
{
return x*x;
}
这个函数,在传统意义上,是一个运行时的东西,因为x是在运行时传入的。
但是,在实际用这个函数的时候,很多时候,如果x是一个hardcode的东西,或者数学常量,比如f(3.1415926), 那实际上,这个就是一个编译时的东西,但是如果没有constexpr这一系列的东西,哪怕用C的宏来代替,还是要多一步运行时的3.1415926*3.1415926的计算
更复杂的,比如
double average(const std::vector<double> a) const noexcept
这个妥妥是个运行时了吧,都是std::vector了,但是,在实际代码里average({1, 2, 3.5, 4}),现在std::vector有一系列的constexpr ctor,那这个函数也变成一个编译时计算了。
所以,现代c++,基本上就是针对编译器的一种语言,能在编译时做了的,都在编译时做
【 在 leslin 的大作中提到: 】
:
: 这些其实都是编译时间和编程时间的交易
: 所谓的高性能计算,其实应用范围很窄,很多地方手撸就可以
: ...................
--
FROM 115.193.172.*