Jam*_*mes 9 c++ narrowing uniform-initialization c++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
Run Code Online (Sandbox Code Playgroud)
是否有理由不使用花括号进行分配?
不是初始化与赋值的问题。
这是一个不同类型的问题。
如果您尝试使用inta 初始化变量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;
}
Run Code Online (Sandbox Code Playgroud)
你的例子,丰富了。
分配值时的一个好习惯?如果您想确保不失去精度,则可以。
例子:可以assign()这样写一个模板函数
template <typename X, typename Y>
void assign (X & x, Y const & y)
{ x = {y}; }
Run Code Online (Sandbox Code Playgroud)
所以你一定可以避免缩小范围
// i is of type int
assign(i, 23); // OK
assign(i, 11.2); // ERROR!
Run Code Online (Sandbox Code Playgroud)
如果(当)缩小不是问题时,您可以避免使用花括号。
| 归档时间: |
|
| 查看次数: |
833 次 |
| 最近记录: |