- 新增现代 C++ 教程的 Preface 章节,包括英文和中文版本 - 添加 C++ Primer 练习代码 - 新增 Learn C++ 教程的 C++ 开发简介章节 - 添加头文件解析文档 - 更新 mkdocs.yml,包含新教程的目录结构 - 修改项目设置,使用 Python 3.10环境
54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
//
|
|
// 2.2.constexpr.cpp
|
|
// chapter 2 language usability
|
|
// modern cpp tutorial
|
|
//
|
|
// created by changkun at changkun.de
|
|
// https://github.com/changkun/modern-cpp-tutorial
|
|
//
|
|
|
|
#include <iostream>
|
|
#define LEN 10
|
|
|
|
int len_foo() {
|
|
int i = 2;
|
|
return i;
|
|
}
|
|
constexpr int len_foo_constexpr() {
|
|
return 5;
|
|
}
|
|
|
|
// error in c++11
|
|
// constexpr int fibonacci(const int n) {
|
|
// if(n == 1) return 1;
|
|
// if(n == 2) return 1;
|
|
// return fibonacci(n-1) + fibonacci(n-2);
|
|
// }
|
|
|
|
// ok
|
|
constexpr int fibonacci(const int n) {
|
|
return n == 1 || n == 2 ? 1 : fibonacci(n-1) + fibonacci(n-2);
|
|
}
|
|
|
|
|
|
int main() {
|
|
char arr_1[10]; // legal
|
|
char arr_2[LEN]; // legal
|
|
|
|
int len = 10;
|
|
// char arr_3[len]; // illegal
|
|
|
|
const int len_2 = len + 1;
|
|
constexpr int len_2_constexpr = 1 + 2 + 3;
|
|
// char arr_4[len_2]; // illegal, but ok for most of the compilers
|
|
char arr_4[len_2_constexpr]; // legal
|
|
|
|
// char arr_5[len_foo()+5]; // illegal
|
|
char arr_6[len_foo_constexpr() + 1]; // legal
|
|
|
|
// 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
|
|
std::cout << fibonacci(10) << std::endl;
|
|
|
|
return 0;
|
|
}
|