亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:首頁 > 技術閱讀 >  constexpr

constexpr

時間:2024-02-15

前面介紹了模板這種編譯期動作,關于編譯期動作,有必要介紹下constexpr。


在這之前有必要簡單提一下constexpr與const的關系,兩者字面上都表達常量的意思。


主要的區別是:const修飾的變量可以在運行時才初始化,而constexpr則一定會在編譯期初始化。


constexpr才是名符其實的常量,所有的constexpr都是const。


而const表示的是read only的語義,保證修飾的變量運行時不可以更改,如果直接改動它,編譯器在編譯時會報錯。const修飾的變量可以在運行時才初始化,而constexpr則一定會在編譯期初始化。


有人可能會用指針等騷操作來修改const修飾的變量值,這種情況下,CPP標準規定產生的是未定義行為,具體可能不同編譯器的具體行為會不相同。所以騷操作魔改const后,無論產生什么行為,都沒必要奇怪,也沒必要深究。



下面具體介紹下constexpr


如上所述,constexpr修飾的才是真正的常量,它會在編譯期間計算出來,整個運行過程中都不可被改變。


constexpr還可用于修飾函數,這個函數的返回值會盡可能在編譯期間被計算出來,然后作為一個常量,但是如果編譯期間不能被計算出,此函數就是被當作一個普通函數處理。


如何使用constexpr?


這里我直接貼出cppreference中的示例代碼:

#include <iostream>#include <stdexcept>// C++11 constexpr functions use recursion rather than iteration// (C++14 constexpr functions may use local variables and loops)constexpr int factorial(int n) { return n <= 1 ? 1 : (n factorial(n - 1)); }
// literal classclass conststr { const char p; std::size_t sz;public: template <std::size_t N> constexpr conststr(const char (&a)[N]) : p(a), sz(N - 1) {} // constexpr functions signal errors by throwing exceptions // in C++11, they must do so from the conditional operator ?: constexpr char operator[](std::size_t n) const { return n < sz ? p[n] : throw std::out_of_range(""); }
constexpr std::size_t size() const { return sz; }};
// C++11 constexpr functions had to put everything in a single return statement// (C++14 doesn't have that requirement)constexpr std::size_t countlower(conststr s, std::size_t n = 0, std::size_t c = 0) { return n == s.size() ? c : 'a' <= s[n] && s[n] <= 'z' ? countlower(s, n + 1, c + 1) : countlower(s, n + 1, c);}
// output function that requires a compile-time constant, for testingtemplate <int n>struct constN { constN() { std::cout << n << '\n'; }};
int main() { std::cout << "4! = "; constN<factorial(4)> out1; // computed at compile time volatile int k = 8; // disallow optimization using volatile std::cout << k << "! = " << factorial(k) << '\n'; // computed at run time
std::cout << "the number of lowercase letters in \"Hello, world!\" is "; constN<countlower("Hello, world!")> out2; // implicitly converted to conststr}


可以大體觀察到constexpr的語法如下:

constexpr literal-type identifier = constant-expression ;constexpr literal-type identifier { constant-expression } ;constexpr literal-type identifier ( params ) ;constexpr ctor ( params ) ;


通過示例代碼及相關注釋,就可以看到,能在編譯期做constexpr就會優先在編譯期計算,編譯期不行就在運行時計算。


也可以看到,在C++14之前constexpr修飾函數時不能有if-else for循環等語句,而在C++14后,這個問題有了改善。


那什么情況下應該使用constexpr修飾函數?


不在乎編譯時間的話,盡可能用constexpr修飾所有的函數,大家有時間可以看看cpp的源碼,多數成員函數都是使用的constexpr修飾。


思考題

constexpr有一個條件是需要滿足literal type,那literal type究竟是什么類型?


推薦閱讀:

https://docs.microsoft.com/en-us/cpp/cpp/constexpr-cpp?view=msvc-170


參考資料

https://en.cppreference.com/w/cpp/language/constexpr

亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品一区二区av白丝在线| 日韩午夜在线| 欧美激情第五页| 欧美日本不卡高清| 蜜臀久久久99精品久久久久久| 免费久久99精品国产自在现线| 欧美大片在线看免费观看| 欧美精品尤物在线| 国产精品成人一区二区| 国产日韩欧美精品综合| 欧美韩日一区二区三区| 欧美色大人视频| 国产一区二区三区在线观看网站| 亚洲电影成人| 欧美一级专区| 欧美激情精品久久久久| 国产精品美女| 亚洲一区二区在线免费观看视频 | 欧美伊人久久| 欧美/亚洲一区| 国产精品久久久久久久久免费樱桃| 国产欧美精品在线| 9久re热视频在线精品| 久久人人爽爽爽人久久久| 国产精品久久久久永久免费观看 | 欧美激情第二页| 狠狠干综合网| 午夜精品久久久久久久久久久久久 | 激情欧美日韩| 欧美一级精品大片| 欧美午夜三级| 亚洲美女精品久久| 欧美日韩一区二区在线播放| 夜夜狂射影院欧美极品| 欧美黑人多人双交| 99精品视频免费在线观看| 欧美精品九九| 99精品久久久| 国产精品久久久999| 亚洲欧美日韩一区在线| 国产精品一二三视频| 亚洲综合视频一区| 国产一区91| 久久综合久色欧美综合狠狠| 国产综合18久久久久久| 欧美一区二区在线免费观看| 国产精品伦一区| 欧美在线首页| 尤物精品在线| 美脚丝袜一区二区三区在线观看 | 一卡二卡3卡四卡高清精品视频| 亚洲黄色成人久久久| 欧美成人精品三级在线观看| 国产欧美精品久久| 在线激情影院一区| 欧美日韩成人一区二区三区| 依依成人综合视频| 亚洲永久精品大片| 亚洲激情一区二区三区| 久久久久久久久伊人| 国产美女精品一区二区三区| 欧美无砖砖区免费| 激情久久五月| 欧美有码在线观看视频| 欧美日韩久久精品| 久久久久久久久一区二区| 欧美肥婆在线| 韩日精品在线| 午夜天堂精品久久久久| 欧美日韩福利| **性色生活片久久毛片| 久久久精品日韩欧美| 国产精品久久久久9999吃药| 在线看片成人| 欧美伊久线香蕉线新在线| 欧美视频导航| 欧美www视频在线观看| 黑人巨大精品欧美黑白配亚洲| 亚洲无线视频| 欧美三级免费| 一本到高清视频免费精品| 美女任你摸久久| 影音先锋中文字幕一区| 久久久久九九九| 国产三级精品三级| 亚洲在线观看免费| 国产乱肥老妇国产一区二| 亚洲一卡二卡三卡四卡五卡| 国产精品嫩草影院av蜜臀| 亚洲午夜精品| 国产色婷婷国产综合在线理论片a| 国产亚洲综合在线| 亚洲激情亚洲| 欧美午夜寂寞影院| 午夜精彩视频在线观看不卡| 国产一区二区三区高清| 久久久精品性| 亚洲全部视频| 国产精品久久福利| 久久成人精品无人区| 亚洲国产高清高潮精品美女| 欧美国产在线观看| 一本色道久久88综合亚洲精品ⅰ| 国产精品theporn| 久久精品亚洲精品国产欧美kt∨| 好吊视频一区二区三区四区| 美女亚洲精品| 夜夜躁日日躁狠狠久久88av| 久久久免费精品视频| 亚洲精品美女免费| 欧美一区二区三区免费看| 国产日产亚洲精品系列| 欧美亚洲不卡| 麻豆精品在线播放| 亚洲在线观看视频网站| 亚洲国产精品www| 国产欧美日韩在线| 欧美激情在线狂野欧美精品| 久久激情久久| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品视频999| 老司机午夜免费精品视频| 99视频超级精品| 亚洲大片在线| 国产色爱av资源综合区| 欧美啪啪一区| 免费91麻豆精品国产自产在线观看| 亚洲一二三四区| 亚洲激情网址| 一区二区在线视频播放| 国产精品美女久久久| 欧美日韩国产专区| 亚洲另类黄色| 日韩视频二区| 国产精品女人久久久久久| 久久精品国产精品| 亚洲精品在线一区二区| 伊人久久综合97精品| 欧美高清影院| 香蕉久久精品日日躁夜夜躁| 亚洲精品欧美| 欧美日韩黄色一区二区| 国产一级精品aaaaa看| 国产精品久久久久一区| 欧美日本不卡| 蜜桃av久久久亚洲精品| 久久久久91| 久久九九免费| 久久在线免费观看视频| 先锋亚洲精品| 日韩视频免费观看高清在线视频| 国产精品在线看| 久久久.com| 亚洲女人天堂成人av在线| 国产亚洲a∨片在线观看| 国产精品免费观看在线| 亚洲欧洲日本专区| 欧美在线精品免播放器视频| 欧美伊人久久久久久久久影院| 亚洲欧美欧美一区二区三区| 亚洲无吗在线| 国内精品久久久久久影视8| 欧美日本在线播放| 欧美va亚洲va国产综合| 久久免费国产精品| 国产精品美女在线观看| 欧美性一二三区| 久久久综合激的五月天| 亚洲精品国产精品国自产观看| 最新69国产成人精品视频免费| 亚洲激情六月丁香| 亚洲免费大片| 裸体一区二区三区| 欧美二区在线看| 免费看的黄色欧美网站| 国产精品国产亚洲精品看不卡15| 欧美午夜精品理论片a级大开眼界| 欧美性猛交一区二区三区精品| 国产精品五月天| 在线观看欧美视频| 亚洲一区二区av电影| 欧美在线地址| 欧美日产国产成人免费图片| 国产精品视频九色porn| 亚洲第一偷拍| 午夜精品久久久久久99热软件| 久久视频在线看| 国产精品美女久久久久av超清| 国产一区二区三区在线观看视频| 一区二区三区在线视频免费观看| 国产精品嫩草99av在线| 免费在线观看成人av| 欧美a级理论片| 国产精品v一区二区三区| 欧美精品一区二| 国产精品99免费看 | 久久精品91久久香蕉加勒比 | 亚洲图片欧洲图片日韩av| 亚洲日本乱码在线观看| 欧美在线视频播放|