August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
一个函数代表一种计算。有时我们希望在编译时进行某种计算,通常这么做的目的是为了避免在运行时计算同样的内容上百万次。使用函数可使计算更易理解,很自然地,有时我们希望在常量表达式中使用函数。在编译时对函数进行计算的想法可通过将函数声明为constexpr来实现。一个constexpr函数若给定常量表达式作为参数,则函数计算将在编译时完成。例如:
假设Point是一个简单的结构,包含两个成员x和y,表示一个二维坐标。现在,给scale()函数一个Point参数,它返回一个Point,其坐标为输入参数根据xscale和yscale缩放后的坐标。例如:
一个constexpr函数和普通函数行为相同,但若在需要一个常量的位置处使用它,则有所不同,此时若传递的参数是常量表达式(如p2情形),则计算在编译时完成,否则输出错误信息(如p1情形)。为使该机制可行,要求constexpr函数必须非常简单,使得编译器(每个符合规范的编译器)能计算它。在C++11中,要求constexpr函数体只能包含一条return语句(如scale()所示);在C++14中,还可以写简单的循环语句。一个constexpr函数不允许有副作用,即它不能改变函数体之外的变量值,当然待赋值或用于初始化的那些变量除外。 ...
Read now
Unlock full access