C++ list initialization
C++ list initialization
- list initialization
- 參考連結(jié)
list initialization
list initialization是C++11引入的一項(xiàng)特性,其官方定義為: Initializes an object from braced-init-list,即使用大括號(hào)內(nèi)的值來(lái)初始化變數(shù)。
與使用=來(lái)進(jìn)行初始化所不同的是,使用list initialization時(shí),會(huì)自動(dòng)檢查是否有"narrowing"的情況發(fā)生,如果有,在編譯時(shí)就會(huì)拋出錯(cuò)誤。
這裡所謂的narrowing指的是將佔(zhàn)用byte數(shù)較多的型別轉(zhuǎn)換為佔(zhàn)用byte數(shù)較少的型別。
嘗試編譯以下程序:
#include <iostream>int main(){int x{6.7};return 0; }會(huì)出現(xiàn)以下錯(cuò)誤:
list_initialization.cpp: In function ‘int main()’: list_initialization.cpp:4:14: error: narrowing conversion of ‘6.7000000000000002e+0’ from ‘double’ to ‘int’ inside { } [-Wnarrowing]int x{6.7};^也就是說(shuō)6.7是double型別的,不應(yīng)該被拿去初始化一個(gè)int型別的變數(shù)。
以下是在TensorRT/samples/common/common.h中的函數(shù)locateFile,當(dāng)中便使用了list initiliazation來(lái)對(duì)以下兩個(gè)局域變數(shù)做初始化:
inline std::string locateFile(const std::string& filepathSuffix, const std::vector<std::string>& directories) {const int MAX_DEPTH{10};bool found{false};//... }除了C++固有的型別外,在初始化自訂義的類別時(shí)也可以用list initialization。如在TensorRT/samples/common/logger.cpp中,同樣是使用list initialization來(lái)初始化gLogger這個(gè)物件:
//Logger建構(gòu)子:Logger(Severity severity = Severity::kWARNING) Logger gLogger{Logger::Severity::kINFO};參考連結(jié)
list initialization (since C++11)
Why is list initialization (using curly braces) better than the alternatives?
總結(jié)
以上是生活随笔為你收集整理的C++ list initialization的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Bootstrap系列之卡片(Cards
- 下一篇: vc驿站视频教程笔记2 ansi 和 u