差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
blog:cpp:basic_const [2022/04/17 23:08] – [顶层const] caodan | blog:cpp:basic_const [2022/04/23 22:43] (当前版本) – [constexpr 和常量表达式] caodan | ||
---|---|---|---|
行 65: | 行 65: | ||
``` | ``` | ||
int i = 0; | int i = 0; | ||
- | int *const p1 = & | + | int *const p1 = & |
- | const int ci = 42; | + | const int ci = 42; |
- | const int *p2 = & | + | const int *p2 = & |
+ | const int *const p3 = p2; // 靠右的const的顶层const, | ||
+ | const int &r = ci; // 用于声明引用的const都是底层const | ||
+ | ``` | ||
+ | |||
+ | ## constexpr 和常量表达式 | ||
+ | |||
+ | 尽管可以使用const 来定义常量表达式,例如: | ||
+ | |||
+ | ``` | ||
+ | const int max_files = 20; | ||
+ | const int limit = max_files + 1; | ||
+ | ``` | ||
+ | |||
+ | 但是在一个复杂的系统中,很难分辨一个出是指是不是常量表达式。 | ||
+ | |||
+ | c++11 规定,允许将变量声明为constexpr 类型,以便编译器来验证变量的值是否是一个常量表达式, 例如: | ||
+ | |||
+ | ``` | ||
+ | constexpr int mf = 20; | ||
+ | constexpr int limit = mf + 1; | ||
+ | constexpr int sz = size(); | ||
+ | ``` | ||
+ | |||
+ | 对constexpr函数的基本要求: | ||
+ | |||
+ | 1. 常量表达式函数体内只能有一条语句,并且是return语句 | ||
+ | 2. return语句中,不能使用非常量表达式的变量、函数,且return的表达式也要是常量表达式。 | ||
+ | |||
+ | 例: | ||
+ | ``` | ||
+ | constexpr int func() { | ||
+ | return 10; | ||
+ | } | ||
``` | ``` |