常數表達式函數
在 C++11 中,constexpr 函數是被限制在僅允許使用非常有限的語法。在 C++14 中,對 constexpr 函數的支援進行了擴展,其中包括允許在函數中使用 if 語句和定義局部變量。
主要限制包括:
- 只允許使用單一 return 語句。直白說就是一個 function 只能有一個 return.
- 不允許在函數體內聲明局部變量。
- 不允許使用迴圈、遞歸等複雜的控制結構。 這些限制使得 C++11 中的 constexpr 函數只能用於非常簡單的計算和操作,無法處理複雜的邏輯和算法。
直接看 code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
// 定義一個 constexpr 函數,計算給定數字的絕對值
constexpr int abs(int x) {
if (x < 0) {
return -x;
} else {
return x;
}
}
int main() {
constexpr int num = -10;
constexpr int result = abs(num); // 在編譯時計算絕對值
std::cout << "絕對值:" << result << std::endl;
return 0;
}
上述例子在 constexpr function 中,使用 if , 2 個 return. 這在 c++11 是不行的 !!! 會有以下錯誤
Language 換成 c++ 14 以上,就可以得到正確結果。


