跳到主要内容

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 */
}