您可以使用=初始化一個變量。例如:用=初始化和用{}初始化有什麼區別?
int a = 1000;
C++ 11引入了額外的記法{}。例如:
int a {1000};
根據編程:原理與實踐由Bjarne Stroustrup的:
C++ 11引入的初始化表示法不法分子縮小轉換。
我想看看這個很酷的功能。而我輸入一段代碼兩次:
#include "std_lib_facilities.h" | #include "std_lib_facilities.h"
|
int main() | int main()
|
{ | {
int x = 254; | int x {254};
char y = x; | char y {x};
int z = y; | int z {y};
|
cout << "x = " << x << '\n' | cout << "x = " << x << '\n'
<< "y = " << y << '\n' | << "y = " << y << '\n'
<< "z = " << z << '\n'; | << "z = " << z << '\n';
|
} | }
左側的代碼使用=而右邊使用{}代碼
但是,即使使用後在右側的代碼失去了一些信息{}。因此,該輸出是代碼兩件相同:
X = 254
Y =■
Z = -2
那麼,什麼是與=初始化之間的差並用{}初始化?
編輯:我的問題可能是也可能不是重複。我只是一個初學者,我甚至不理解可能原始問題的代碼。我不是法官。即使它是重複的,我也無法理解這個問題的任何答案。我覺得這個問題應該被視爲一個原創的問題,因爲我會理解與該問題答案的某些高級詞語相反的簡單語言。
您確切地認爲,在正確的例子中,「縮小轉換」會失敗嗎?在你的機器上初始化'char'的正數大於'CHAR_MAX'? – DevSolar
'char'(在你的系統中)默認爲'signed char'(但注意'signed char'!='char')。 '254'是一個有效的'char'(沒有縮小轉換,它的數值無關緊要),但是轉換回爲int,由於符號的原因你會得到它。要查看發生了什麼變化,請嘗試'unsigned char k = {260};'vs'unsigned char k = 260;' –
如果使用'gcc'添加'-Werror = narrowing'命令行選項來取消縮小轉換。 –