C++ 11 的語法,大括號初始器( braced initializer )。
其實之前在讀 C++ Primer 時就有讀到了,但當時只想說既然功能一樣只是設定初值,
何必改成比較少見的寫法呢? 當初也沒特別想精進寫作技巧,也就沒特別研究。
這次有機會再讀到一次,就來了解一下這種寫法的背後用意吧。
有其他設定初始值的方式嗎?
有的,除了我們習慣的等號之外,
還有使用小括號的方式:
基本上這樣的用法和大括號初始器完全相同,
但目前還是推薦使用大括號初始器,
這是因為可以用相同方式初始幾乎所有東西,
例如陣列也是使用大括號進行初始化,
因此大括號初始器也被稱為 uniform initialization (統一初始化)。
剛剛有提到等號和小括號的方式和大括號幾乎相同,
那差異在哪呢?
來舉一個例子:
這次宣告三個int變數,分別都指定不同的浮點數,
可以看到 行53 、 行54都只是警告,但 行55 卻是錯誤,
這是因為涉及到縮小轉型的時候,
你已經寫了初值,但轉型之後卻會變成0,
大括號初始器會認為這應該不是你想要的,
很有可能是因為你的疏忽而宣告成錯誤的型別,
因此出現錯誤來警示你有風險。
也就是說,無意的縮小轉型是不應該被忽視的。
另外 行56 相同都是指定 0.2 ,但卻只有警告,
這就表現出指定運算子作為初值設定和大括號初始器的差異。
大括號初始器能提供更嚴謹的檢查機制。
清空變數
如果一開始還不想要設定初值,
那麼直接打上大括號即可,
像這樣:
空的大括號就會自動幫你設定初值為 0 ,
也能夠保證不會存取到雜質。
沒有留言:
張貼留言