[英]C++: using curly braces to prevent narrowing during assignment
我熟悉使用花括號/初始化列表來防止在初始化變量時縮小,但是在為變量賦值時使用它是一種好習慣嗎?
例如
int i{1}; // initialize i to 1
double d{2.0}; // initialize d to 2.0
i = {2}; // assign value 2 to i
i = {d}; // error: narrowing from double to int
是否有理由不使用花括號進行分配?
不是初始化與分配的問題。
這是一個不同類型的問題。
如果嘗試使用double
初始化int
變量,則會得到相同的錯誤。
您可以將{d}
分配給另一個double
變量。
int main ()
{
int i{1}; // initialize i to 1
//int i2{3.0}; // ERROR!
double d{2.0}; // initialize d to 2.0
double d2{1.0}; // initialize d2 to 1.0
i = {2}; // assign value 2 to i
//i = {d}; // error: narrowing from double to int
d2 = {d}; // OK
return 0;
}
你的榜樣,豐富了。
分配值時的一個好習慣? 可以,如果你想確保不失去精度。
例如:您可以用這種方式編寫模板assign()
函數
template <typename X, typename Y>
void assign (X & x, Y const & y)
{ x = {y}; }
所以你一定要避免縮小范圍
// i is of type int
assign(i, 23); // OK
assign(i, 11.2); // ERROR!
如果(縮小)縮小不是問題,可以避免花括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.