C++ 变量初始化
本节介绍在 C++ 中对变量进行初始化的常用方法。
括号和花括号
在 C++ 中,变量初始化时使用括号 ()
和花括号 {}
有一些区别。示例 :
std::ptrdiff_t w (0);
std::ptrdiff_t w {0};
括号初始化
使用括号 ()
进行变量初始化时,编译器会根据变量的类型进行定义。如果变量是内置类型,则使用圆括号进行初始化会执行零初始化,将变量的值设置为0。对于自定义类型,括号初始化可能会调用适当的构造函数。
例如,std::ptrdiff_t w(0)
将使用零进行初始化,将 w 的值设置为 0。
花括号初始化
使用花括号 {}
进行变量初始化时,编译器会执行列表初始化。这种初始化语法可以更精确地指定变量的初始值,并且可以避免一些潜在的类型转换问题。
例如,std::ptrdiff_t w{0}
将使用 0 进行列表初始化,将 w 的值设置为 0。
在大多数情况下,使用括号和花括号进行初始化都可以正常工作,并且没有明显的区别。然而,有一些特殊情况下,使用花括号初始化可能会导致编译错误或意外的结果,这取决于变量的类型和初始化列表中的元素数量。因此,建议根据具体情况选择适当的初始化方法。
BlockBuffer::BlockBuffer(uint8_t w, uint8_t h)
: w {static_cast < std::ptrdiff_t > (w)},
h {static_cast < std::ptrdiff_t > (h)}
{
/* do something */
}