我熟悉使用大括号/初始化列表来阻止初始化变量时缩小,但在分配值时使用它是一种好习惯一个变量呢?
例如
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
有没有理由不使用大括号进行分配?
答案 0 :(得分:2)
不是初始化与分配的问题。
这是一个不同类型的问题。
如果您尝试使用int
初始化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!
如果(缩小时)缩小问题,则可以避免花括号。