1樓:stay
你可以這樣理解,如果不用constexpr函式,有template
cnt> struct scale_t :integral_constant ,cnt >{}size_t scale (size_t cnt) inti=3 ;int cval =scale_t <3>:: value ;int val= scale(i );constexpr(指函式)通過將scale_t和scale整合在一起的方式,使得編譯器可以選擇呼叫scale_t來生成編譯期常量或者scale來生成對應的函式,這樣同乙個功能的函式就不用寫兩遍 而constexpr(指變數)實際上你可以理解為乙個編譯期常量(表示式)的別名,如此一來constexpr int val = scale(i)自然就不成立了,因為此時i的值不是編譯期確定的(比如std::cin>>i),scale此時等同於呼叫函式,scale(i)自然就不是編譯期常量了;而ci是乙個通過編譯期常量初始化的乙個const變數,const變數不允許寫入(雖然可以const_cast),因此實際上ci其實是constexpr變數,scale(ci)也會得到乙個編譯期常量,只要你把3改成i,那麼連cval也會編不過 露公尺 Lumi constexpr標記的函式,可以在執行時呼叫,也可以在編譯期完成。你可以認為,如果它能在編譯期完成,那麼編譯器就會在編譯期去完成這個函式的計算。為啥C 2020要求必須在該函式結束前就要釋放掉,我覺得應該是為了編譯器方便實現吧。如果你還能返回或者放在成員變數裡等在這個函式的上一層... 大段長安 沒有必要可以避免吧,除非發現特別不利的影響,比如影響了程式的效率。我不是專業程式設計師,所以一貫在c 中寫入一些c函式的。就從你的舉例來說,printf的可讀性確實要好一些。 SuperFashi 是的,C 使用時除非實在沒有替代品 例如exit函式 否則一定避免使用C。例如不用sprin... Pluto Hades 正常情況下,基類的構造和析構是不會被派生類覆蓋的。這也很好記,因為它們不同名嘛 正常new派生類指標,會先呼叫基類構造再呼叫派生類構造。正常delete派生類指標,和構造相反,先呼叫派生類析構,再呼叫基類析構。 Bunny.Lann 虛成員函式和虛析構函式肯定都是呼叫D的,只...C 在constexpr中的new是怎麼實現的?
C 中是否應避免使用C語言函式
c 中,delete是如何呼叫虛析構函式的?