日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++11中静态断言static_assert

發(fā)布時間:2023/12/20 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++11中静态断言static_assert 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

c++11中的靜態(tài)斷言(static_assert)

在c++11中引入了,目的是在編譯時就能檢查處一些問題。寫法如下:

static_assert(常量表達式,提示字符串);

?

如果第一個參數(shù)常量表達式的值為真(true或者非零值),那么static_assert不做任何事情,就像它不存在一樣,否則會產生一條編譯錯誤,錯誤位置就是該static_assert語句所在行,錯誤提示就是第二個參數(shù)提示字符串。

?

非常簡單的例子如下:

int main () {static_assert(1 != 1, "1 == 1 is true.");return 0; }

結果:In function 'int main()': 29:5: error: static assertion failed: 1 == 1 is true.

編譯不通過。

?

優(yōu)點如下:

1,使用static_assert,我們可以在編譯期間發(fā)現(xiàn)更多的錯誤,提前找出錯誤的原因。

2,static_assert可以用在全局作用域中,命名空間中,類作用域中,函數(shù)作用域中,幾乎可以不受限制的使用。

3,編譯器在遇到一個static_assert語句時,通常立刻將其第一個參數(shù)作為常量表達式進行演算,但如果該常量表達式依賴于某些模板參數(shù),則延遲到模板實例化時再進行演算,這就讓檢查模板參數(shù)成為了可能。

4,由于之前有望加入C++0x標準的concepts提案最終被否決了,因此對于檢查模板參數(shù)是否符合期望的重任,就要靠static_assert來完成了,所以如何構造適當?shù)某A勘磉_式,將是一個值得探討的話題。

5,性能方面,由于是static_assert編譯期間斷言,不生成目標代碼,因此static_assert不會造成任何運行期性能損失。

在一些開源的代碼中,使用到了靜態(tài)斷言,例如:rocksdb、mysql等,其中mysql中的table_helper.cc中的一個函數(shù)的例子如下:

void set_field_mdl_type(Field *f, opaque_mdl_type mdl_type) {static_assert(MDL_TYPE_END == 11,"Adjust performance schema when changing enum_mdl_type");// ...// ... }

?

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的c++11中静态断言static_assert的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。