簡體   English   中英

C ++:使用花括號來防止在賦值期間縮小范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM