我熟悉使用花括号/初始化器列表来防止在初始化变量时变窄,但是在为变量赋值时使用它也是一种好习惯吗?
例如
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
是否有理由不使用花括号进行赋值?
我熟悉使用花括号/初始化器列表来防止在初始化变量时变窄,但是在为变量赋值时使用它也是一种好习惯吗?
例如
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
是否有理由不使用花括号进行赋值?
不是初始化与分配的问题。
这是不同类型的问题。
如果您尝试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!
如果(何时)变窄不是问题,您可以避免使用花括号。