[導讀] C20新增了兩個const相關(guān)的關(guān)鍵字,于是當前存在四個相似的關(guān)鍵字:const,constexpr,consteval和constinit。接下來分別來進行討論。第一,經(jīng)過const修飾的變量具有只讀屬性,并且初始化發(fā)生于運行期。也就是說,若一個變量定義之后不允許被修改,就應該...
C 20新增了兩個const相關(guān)的關(guān)鍵字,于是當前存在四個相似的關(guān)鍵字:const,constexpr,consteval和constinit。接下來分別來進行討論。第一,經(jīng)過const修飾的變量具有只讀屬性,并且初始化發(fā)生于運行期。也就是說,若一個變量定義之后不允許被修改,就應該給它加上const。若在一個成員函數(shù)中不修改任何成員變量,就應該在成員函數(shù)后面加上const。但是,它也可能發(fā)生于編譯期,例如以const int代替宏來定義數(shù)組大小。第二,經(jīng)過constexpr修飾的變量或是函數(shù),既保證只讀,又發(fā)生于編譯期。然而,只有在參數(shù)是常量,和顯式地以其返回值來初始化一個編譯期常量時,它修飾的函數(shù)才會一定發(fā)生于編譯期。如: 1 #include ? 2 3 constexpr ?int ?sqr (int ?n) ?{ 4 ???? return ?n?*?n; 5 } 6 7 8 int ?main () ?{ 9 10 ?? //?compile?time 11 ?? static_assert (sqr( 10 )?==? 100 ); 12 13 ?? //?compile?time 14 ?? int ? array [sqr( 10 )]; 15 16 ?? //?compile?time 17 ?? constexpr ? int ?res?=?sqr( 10 ); 18 19 ?? //?compile?time?or?run?time 20 ?? int ?tmp?=?sqr( 10 ); 21 22 ?? //?run?time 23 ?? int ?a?=? 10 ; 24 ?? int ?tmp2?=?sqr(a); 25 }
此處,最后兩個都可能發(fā)生于運行期。第三,consteval用于創(chuàng)建一個immediate function(立即函數(shù)),immediate function的每次調(diào)用都會創(chuàng)建一個編譯期常量。經(jīng)過該關(guān)鍵字修飾的函數(shù)會自動inline,這個函數(shù)中不能包含static數(shù)據(jù),或是try、goto、new這種指令,也不能調(diào)用或使用非常量的函數(shù)與數(shù)據(jù)。所以,簡單來說,經(jīng)過consteval修飾的函數(shù)必定會在編譯期解析。一個小例子: 1 #include ? 2 3 int ?sqr1 (int ?n) ?{ 4 ???? return ?n?*?n; 5 } 6 7 constexpr ?int ?sqr2 (int ?n) ?{ 8 ???? return ?n?*?n; 9 } 10 11 consteval?int ?sqr3 (int ?n) ? { 12 ???? return ?n?*?n; 13 } 14 15 16 int ?main () ?{ 17 18 ?? //constexpr?int?res1?=?sqr1(10);?//?error!?run?time 19 ?? constexpr ? int ?res2?=?sqr2( 10 );? //?compile?time 20 ?? constexpr ? int ?res3?=?sqr3( 10 );? //?compile?time 21 22 ?? int ?a?=? 10 ; 23 ?? int ?res4?=?sqr1(a);? //?run?time 24 ?? int ?res5?=?sqr2(a);? //?run?time 25 ?? //int?res6?=?sqr3(a);?//?error!?compile?time 26 27 }
這里有三個版本的sqr函數(shù),sqr1()無任何修飾,所以只能在運行期調(diào)用;sqr2()以constexpr修飾,可能發(fā)生于運行期,也可能發(fā)生于編譯期,取決于傳入的參數(shù);sqr3()以consteval修飾,所以必定發(fā)生于編譯期。因此,企圖用運行期函數(shù)(sqr1)的返回值來初始化編譯期常量,或是企圖用非常量作為參數(shù)去調(diào)用編譯期函數(shù)(sqr3),都將以失敗告終。第四,constinit可以確保變量初始化于編譯期,這些變量須得處于靜態(tài)存儲區(qū)或是線程存儲期。靜態(tài)存儲區(qū)的變量,指的是全局變量、static變量或static成員變量;線程存儲區(qū)的變量,指的是以thread_local修飾的變量,就是和線程生命期綁定的局部變量。舉個例子: 1 #include ? 2 3 constexpr ? int ?val1?=? 100 ; 4 constinit? int ?val2?=? 100 ; 5 6 7 int ?main () ?{ 8 9 ?? //std::cout?<" val1?"?< val1?<'\n';?//?error 10 ?? std :: cout ?< " val2?" ?< val2?< '\n' ; 11 12 ?? constexpr ? auto ?val3?=? 100 ; 13 ?? //constinit?auto?val4?=?100;?//?error 14 ??constinit? thread_local ? auto ?val5?=? 100 ; 15 }
如第13行所示,不能用constinit修飾非靜態(tài)的局部變量。以constexpr和constinit修飾的變量都存在于編譯期,不同之處在于,constexpr帶有只讀屬性,而constinit沒有。最后,畫張圖來總結(jié)一下。 這里有兩個維度,橫向是運行時期,縱向是讀寫權(quán)限。關(guān)鍵字的作用就是來限定變量和函數(shù)在這兩個維度的表現(xiàn)。由于四個關(guān)鍵字不是同一時間引入的,所以const和constexpr有交叉部分(圖中沒體現(xiàn))。就是說,const也可以表現(xiàn)編譯期,constexpr也可以表現(xiàn)運行期。而C 20新加的兩個關(guān)鍵字,分別用于限定非只讀的編譯期變量和函數(shù),變量必須存在于靜態(tài)存儲區(qū)或線程存儲區(qū),函數(shù)必須是immediate function。- EOF -
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。
關(guān)鍵字:
驅(qū)動電源
在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關(guān)鍵。
關(guān)鍵字:
工業(yè)電機
驅(qū)動電源
LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...
關(guān)鍵字:
驅(qū)動電源
照明系統(tǒng)
散熱
根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。
關(guān)鍵字:
LED
設計
驅(qū)動電源
電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...
關(guān)鍵字:
電動汽車
新能源
驅(qū)動電源
在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...
關(guān)鍵字:
發(fā)光二極管
驅(qū)動電源
LED
在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...
關(guān)鍵字:
LED照明技術(shù)
電磁干擾
驅(qū)動電源
開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源
關(guān)鍵字:
LED
驅(qū)動電源
開關(guān)電源
LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。
關(guān)鍵字:
LED
隧道燈
驅(qū)動電源
LED驅(qū)動電源在LED照明系統(tǒng)中扮演著至關(guān)重要的角色。由于LED具有節(jié)能、環(huán)保、長壽命等優(yōu)點,使得LED照明在各個領域得到廣泛應用。然而,LED的電流、電壓特性需要特定的驅(qū)動電源才能正常工作。本文將介紹常用的LED驅(qū)動電...
關(guān)鍵字:
LED驅(qū)動電源
led照明
LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電源轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。
關(guān)鍵字:
LED
驅(qū)動電源
高壓工頻交流
種種跡象都在表明,半導體行業(yè)或已提前進入寒冬時期,越來越多的廠商開始扛不住了……
關(guān)鍵字:
LED
半導體
驅(qū)動電源
崧盛股份9日發(fā)布投資者關(guān)系活動記錄表,就植物照明發(fā)展趨勢、行業(yè)壁壘等問題進行分享。植物照明未來市場需求廣闊崧盛股份指出,植物照明將會走向長期產(chǎn)業(yè)領域。主要原因有三:第一,LED植物照明賦能終端種植更具有經(jīng)濟價值。由于LE...
關(guān)鍵字:
崧盛股份
驅(qū)動電源
在當今高度發(fā)展的技術(shù)中,電子產(chǎn)品的升級越來越快,LED燈技術(shù)也在不斷發(fā)展,這使我們的城市變得豐富多彩。 LED驅(qū)動電源將電源轉(zhuǎn)換為特定的電壓和電流,以驅(qū)動LED發(fā)光。通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流電(即...
關(guān)鍵字:
LED
驅(qū)動電源
高壓直流
人類社會的進步離不開社會上各行各業(yè)的努力,各種各樣的電子產(chǎn)品的更新?lián)Q代離不開我們的設計者的努力,其實很多人并不會去了解電子產(chǎn)品的組成,比如LED電源。
關(guān)鍵字:
LED
驅(qū)動電源
低壓直流
隨著科學技術(shù)的發(fā)展,LED技術(shù)也在不斷發(fā)展,為我們的生活帶來各種便利,為我們提供各種各樣生活信息,造福著我們?nèi)祟悺ED驅(qū)動電源實際上是一種電源,但是它是一種特定的電源,用于驅(qū)動LED發(fā)射帶有電壓或電流的光。 因此,LE...
關(guān)鍵字:
LED
驅(qū)動電源
電流
LED燈作為一種新型節(jié)能和無污染光源,由于其特有的發(fā)光照明特性,在現(xiàn)代照明應用中發(fā)揮著革命性的作用。作為 LED 照明產(chǎn)業(yè)鏈中最為核心的部件之一,LED 驅(qū)動電源的驅(qū)動控制技術(shù)所存在的可靠性低、成本高等典型問題一直制約著...
關(guān)鍵字:
多路
LED
驅(qū)動電源
隨著社會的快速發(fā)展,LED技術(shù)也在飛速發(fā)展,為我們的城市的燈光煥發(fā)光彩,讓我們的生活越來越有趣,那么你知道LED需要LED驅(qū)動電源嗎?那么你知道什么是LED驅(qū)動電源嗎?
關(guān)鍵字:
LED
開關(guān)電源
驅(qū)動電源
早前有新聞稱,Cree在2018年開始宣布轉(zhuǎn)型高科技半導體領域,并一邊逐漸脫離照明與LED相關(guān)業(yè)務,一邊持續(xù)投資半導體。在今日,Cree宣布與SMART Global Holdings, Inc.達成最終協(xié)議,擬將LED...
關(guān)鍵字:
cree
led照明