」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼非常量變數不能用作 C++ 中的模板參數?

為什麼非常量變數不能用作 C++ 中的模板參數?

發佈於2025-01-12
瀏覽:119

Why Can\'t Non-Constant Variables Be Used as Template Arguments in C  ?

為什麼非常量變數不能作為範本參數傳遞?

在 C 中,範本參數必須是常數表達式。這意味著它們的值必須在編譯時已知。編譯器無法在此上下文中計算非常量變數。

考慮代碼:

template 
void modify(){}

要傳遞一個非常量變數作為範本參數,我們可以這樣寫:

for(int i = 0; i ();
}

但是,這會觸發錯誤,因為編譯器無法在編譯時決定 i 的值。循環體可能會執行多次,改變i的值。

不修改API即可達到目的

我們可以使用模板特化來實現,而不是直接傳遞非常量變量迭代調用:

#include 

template
void modify() { std::cout " 
void modify() { std::cout " 
void modify() {
    std::cout " ();
}

int main() {
    modify();
}

使用動態值呼叫Modify

要使用編譯時未知的值來呼叫Modify,我們可以使用稱為模板元程式設計的技術。這是一個簡化的範例:

#include 

template <:tuple>>
struct TupleSize;

template 
struct TupleSize<:tuple>> {
    static const int value = sizeof...(Args);
};

template 
void callModify(int i) {
    if constexpr (i ();
        callModify(i 1);
    }
}

int main() {
    int n = 10;
    callModify::value>(0);
}

在此範例中,callModify 採用參數 N,該參數是包含 i 所需值範圍的元組的大小。此函數使用遞歸元程序產生呼叫以修改至指定大小 N。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3