Home Item 15 - 常數表達式函數(constexpr function)(中文)
Post
Cancel

Item 15 - 常數表達式函數(constexpr function)(中文)

常數表達式函數

在 C++11 中,constexpr 函數是被限制在僅允許使用非常有限的語法。在 C++14 中,對 constexpr 函數的支援進行了擴展,其中包括允許在函數中使用 if 語句和定義局部變量。

主要限制包括:

  1. 只允許使用單一 return 語句。直白說就是一個 function 只能有一個 return.
  2. 不允許在函數體內聲明局部變量。
  3. 不允許使用迴圈、遞歸等複雜的控制結構。 這些限制使得 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 是不行的 !!! 會有以下錯誤

Desktop View

Language 換成 c++ 14 以上,就可以得到正確結果。

Desktop View

☝ツ☝

This post is licensed under CC BY 4.0 by the author.

👈 ツ 👍

Item 15 - constexpr function (English)

Item 20 - constexpr if (English)