我很熟悉在初始化变量时使用花括号/初始化列表来防止变窄,但是在为赋值时使用它是个好习惯变数也?
例如
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!
如果(当)缩小不是问题时,您可以避免花括号。
关于C++:使用大括号防止赋值时变窄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716820/