為什麼不能在常數表達式中使用函數參數?
常數表達式是可以在編譯時計算的表達式。 Constexpr 函數是如果使用 constexpr 參數呼叫則可以在編譯時求值的函數。
在程式碼中,make_const 函數是一個 constexpr 函數。但是,t1 中的參數 i 不是 constexpr 參數,因為它沒有指定為 const。
void t1(const int i) { constexpr int ii = make_const(i); // error: i is not a constant expression }
要解決此問題,可以透過將i 的型別變更為const int 使i 成為常數參數,或透過將t1 定義為constexpr 函數本身:
void t1(const int i) // const int i to make i a constant parameter { constexpr int ii = make_const(i); }
constexpr int t1(const int i) // constexpr t1 to make t1 a constexpr function { return make_const(i); }
使用a 時會出現另一個問題範本函數中的constexpr 函數旨在傳回constexpr 值。
template<int i> constexpr bool do_something(){ return i; } constexpr int t1(const int i) { return do_something<make_const>(); // error: i is not a constant expression }</make_const></int>
在這種情況下,編譯器無法保證參數 i 是常數表達式,因為它取決於模板的值傳遞給 do_something 的參數。為了確保 t1 可以在編譯時求值,模板參數 i 必須是常數表達式。
另一種方法是使用 std::variant 和 std::integral_constant 建立一個編譯時常數,可以與執行時間值結合使用。
template<auto i> using constant_t=std::integral_constant<decltype>; template<auto i> constexpr constant_t<i> constant_v={}; template<auto...is> using var_enum_t=std::variant<constant_t>...>;</constant_t></auto...is></i></auto></decltype></auto>
這允許建立一個可以在運行時選擇的編譯時常數變體std::存取。
auto idx=var_index(3/* 3 can be runtime */); std::visit([](auto three){ // three is a compile time value here }, idx);
以上是為什麼不能在常數表達式中使用函數參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Gulc是一個高性能的C庫,優先考慮最小開銷,積極的內襯和編譯器優化。 其設計非常適合高頻交易和嵌入式系統等關鍵應用程序,其設計強調簡單性,模型

本文詳細介紹了C函數返回類型,包括基本(int,float,char等),派生(數組,指針,結構)和void類型。 編譯器通過函數聲明和返回語句確定返回類型,執行

本文解釋了C函數聲明與定義,參數傳遞(按值和指針),返回值以及常見的陷阱,例如內存洩漏和類型不匹配。 它強調了聲明對模塊化和省份的重要性

本文詳細介紹了字符串案例轉換的C功能。 它可以通過ctype.h的toupper()和tolower()解釋,並通過字符串迭代並處理零終端。 常見的陷阱,例如忘記ctype.h和修改字符串文字是

本文研究C函數返回值存儲。 較小的返回值通常存儲在寄存器中以備速度;較大的值可能會使用指針來記憶(堆棧或堆),影響壽命並需要手動內存管理。直接ACC

本文解釋了C標準模板庫(STL),重點關注其核心組件:容器,迭代器,算法和函子。 它詳細介紹了這些如何交互以啟用通用編程,提高代碼效率和可讀性t

本文分析了形容詞“獨特”的多方面用途,探索其語法功能,常見的短語(例如,“不同於”,“完全不同”),以及在正式與非正式中的細微應用

本文詳細介紹了c中有效的STL算法用法。 它強調了數據結構選擇(向量與列表),算法複雜性分析(例如,std :: sort vs. std vs. std :: partial_sort),迭代器用法和並行執行。 常見的陷阱


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)