C 11新標準之五 constexpr

2021-07-29 14:58:14 字數 839 閱讀 6937

常量表示式必須在編譯期間計算出它的值並且 它的值不可以被改變。

在c++11中,我們可以通過宣告constexpr讓編譯器確定乙個變數是不是常量表示式,宣告為constexpr的變數是const型別的變數,它必須由常量表示式來初始化。例如:

[cpp]view plain

copy

constexpr 

intmf = 20; 

// 常量表示式

constexpr int

limit = mf + 1; 

// 常量表示式

constexpr int

sz = size(); 

// 如果size()是常量表示式則編譯通過,否則報錯

在c++11中,我們可以宣告某些函式是常量表示式,這樣的函式必須在編譯期間計算出它們的值,這樣的函式必須滿足以下條件:

返回值和引數必須是literal型別

函式體必須只包含乙個return語句

函式提可以包含其他的語句,但是這些語句不能在執行期起作用

函式可以不返回常量,但是在呼叫的時候實參必須傳入常量表示式

例如:[cpp]view plain

copy

constexpr 

intnew_size()  

constexpr size_t

scale(

size_t

arg)  

scale(2) //正確

inti = 2;  

scale(i) //出錯

定義為constexpr型別的函式隱式的都為內聯函式(inline)

C 11新標準總結

c 11新標準出現已久,在此主要對它做乙個總結 c 11新增型別long long和unsigned long long,以支援64位的整型,char16 t,char32 t,以支援16位和32位的字元表示。用大括號括起來的列表 初始化列表 的適用範圍,使其可用於所有內建型別和使用者定義的型別。使...

C 11新標準之範圍for語句

說起for語句,我們都不會陌生,因為在迴圈中經常會用for語句來遍歷一些陣列什麼的,就形如以下的for迴圈,是我們最常見的 for int i 0 i 5 i 範圍for語句可以遍歷容器或者其他序列的所有元素。以下用乙個小小的 測試片段說明一下這個新特性的使用方法 傳統寫法,遍歷每個string型別...

C 11新標準執行緒庫之方法五

include include include include using namespace std class a a const a a m i a.m i a private int m i void myprint const int i const a mybuf int main in...