11

我熟悉使用花括号/初始化器列表来防止在初始化变量时变窄,但是在为变量赋值时使用它也是一种好习惯吗?

例如

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

是否有理由不使用花括号进行赋值?

4

1 回答 1

3

不是初始化与分配的问题。

这是不同类型的问题。

如果您尝试int使用 a 初始化变量double,则会收到相同的错误。

您可以分配{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! 

如果(何时)变窄不是问题,您可以避免使用花括号。

于 2016-04-19T14:16:16.130 回答