2022年7月25日 星期一

[C++] 使用 大括號" {} " 來取代 等號" = "去設定初始值

C++ 11 的語法,大括號初始器( braced initializer )。

其實之前在讀 C++ Primer 時就有讀到了,但當時只想說既然功能一樣只是設定初值,

何必改成比較少見的寫法呢? 當初也沒特別想精進寫作技巧,也就沒特別研究。

這次有機會再讀到一次,就來了解一下這種寫法的背後用意吧。


有其他設定初始值的方式嗎?

有的,除了我們習慣的等號之外,

還有使用小括號的方式:


基本上這樣的用法和大括號初始器完全相同,

但目前還是推薦使用大括號初始器,

這是因為可以用相同方式初始幾乎所有東西,

例如陣列也是使用大括號進行初始化,

因此大括號初始器也被稱為 uniform initialization (統一初始化)。


剛剛有提到等號和小括號的方式和大括號幾乎相同,

那差異在哪呢?

來舉一個例子:

這次宣告三個int變數,分別都指定不同的浮點數,

可以看到 行53行54都只是警告,但 行55 卻是錯誤,

這是因為涉及到縮小轉型的時候,

你已經寫了初值,但轉型之後卻會變成0,

大括號初始器會認為這應該不是你想要的,

很有可能是因為你的疏忽而宣告成錯誤的型別,

因此出現錯誤來警示你有風險。

也就是說,無意的縮小轉型是不應該被忽視的。

另外 行56 相同都是指定 0.2 ,但卻只有警告,

這就表現出指定運算子作為初值設定和大括號初始器的差異。

大括號初始器能提供更嚴謹的檢查機制。


清空變數

如果一開始還不想要設定初值,

那麼直接打上大括號即可,

像這樣:

空的大括號就會自動幫你設定初值為 0 ,

也能夠保證不會存取到雜質。

沒有留言:

張貼留言

社會新鮮人如何投資?

我的觀點是,在 沒有很多 本錢 的情況下, 別寄望每個月幾千元放到股票或者最近很夯的高股息ETF就能讓你致富, 先投資自己,讓自己的本業收入提高吧。