3、宣告與定義常量表示式是編譯期間就能計算其結果的表示式。
const修飾的物件既可能是編譯期常量,也可能是執行期常量。
constexpr說明符宣告可在編譯時計算函式或變數的值
constexpr
intmax
(int a ,
int b)
intmain()
const用來告知程式設計師const指向的內容不可被修改,主要目的是為了避免寫出bug。
constexpr在所有編譯期常量的地方做限定。使得constexpr修飾的語句在編譯期即可計算得到值。讓編譯期優化**效能。
constexpr修飾的函式,要滿足什麼條件才能成為編譯期常量表示式?
constexpr 函式的返回值必須在編譯時就能被確定。
斷言是一條檢測假設成立與否的語句。
斷言assert是乙個巨集,而非乙個函式。
static_assert 是乙個關鍵字,而非乙個函式。
用法:包含標頭檔案 以除錯模式編譯程式
//assert( bool_expr ); // bool_expr 為假則中斷程式
std::array a
;//c++17 型別引數推導
for(size_t i =
0; i <= a.
size()
; i++
)
上面示例的第6行**中,若assert中斷了程式則表明程式出bug了!程式設計師要重編**解決這個bug,而不是把assert()放在那裡當成正常程式的一部分
assert斷言中所用的表示式可以不是是編譯期常量表示式。
2.1. static_assert ( bool_constexpr, message)
其中兩個引數解釋如下:(1
) bool_constexpr: 編譯期常量表示式,可轉換為bool 型別(2
) message: 字串字面量 ,是斷言失敗時顯示的警告資訊。自c++
17起,message是可選的
// 下面的語句能夠確保該程式在32位的平台上編譯進行。
// 如果該程式在64位平台上編譯,就會報錯 (例子來自msdn)
static_assert
(sizeof
(void*)
==4,"64-bit code generation is not supported."
);
常用在模版程式設計中 ,對寫庫的作者用處大
在static_assert的第乙個引數 bool_constexpr 中不能有變數表示式
這裡我們指的是assert,執行期的斷言。
若某些狀況是你預期中的,那麼用錯誤處理;若某些狀況永不該發生,用斷言)
int n
, m;
std::cin >> n;
assert
((n !=0)
&&"divisor cannot be zero!");
// 不合適
int q = m / n;
int n
, m;
dowhile
(n ==0)
;// 在這裡編寫修復bug的**
assert
((n !=0)
&&"divisor cannot be zero!");
int q = m / n;
下面的例子說明了在編譯期,靜態斷言就已經執行了,因為array的nums在編譯期就應該知道它的值。
「宣告」是引入識別符號並描述其型別,無論是型別,物件還是函式。編譯器需要該「宣告」,以便識別在它處使用該識別符號。
extern
int bar;
extern
intg
(int
,int);
doublef(
int,
double);
// extern can be omitted for function declarations
class
foo;
// no extern allowed for type declarations
「定義」例項化/實現這個識別符號。鏈結器需要「定義」,以便將對識別符號的引用鏈結到識別符號所表示的實體。
int bar;
intg
(int lhs,
int rhs)
doublef(
int i,
double d)
class
foo;
1、定義有時可取代宣告,反之則不行
2、識別符號可被宣告多次,但只能定義一次
3、 定義通常伴隨著編譯器為識別符號分配記憶體
正規表示式 常用表示式
羅馬數字 string p1 m d?c c dm l?x x lc v?i i vx string t1 vii match m1 regex.match t1,p1 交換前二個單詞 string t2 the quick brown fox string p2 s s s regex x2 ne...
C 指標 表示式 常量
一 指標 在計算機語言中,由於通過位址能找到所需的變數,可以說位址指向該變數單元,因此把位址形象的稱為 指標 意思是能通過它來找到以它為位址的記憶體單元。1.1 指標 變數 指標變數與普通變數一樣,使用之前不僅要定義說明而且必須要賦具體的值,未經賦值的指標變數不能使用 可以對指標變數初始化為null...
正規表示式常用
正規表示式的介紹 1 資料型別 基本資料型別 number string boolean null undefined 複雜資料型別 array function object math date regexp正規表示式 string number boolean 2 regular express...