使用相等运算符或使用大括号为变量赋值是否有区别

Is there a difference between assigning a value to a variable using the equal operator or using curly braces?

本文关键字:变量 是否 有区别 赋值 运算符      更新时间:2023-10-16

我看到一个程序员使用大括号初始化变量的代码

int var{ 5 };

而不是使用赋值运算符

int var = 5;

我知道使用大括号为 lhs 变量赋值是一种 C++11 语法。使用两者有什么区别吗?

感谢您的回复。

它们是不同类型的初始化:

T a{b};   // list initialization
T a = b;  // copy initialization
T a(b);   // direct initialization

int没有区别,但其他类型的肯定会有差异。例如,如果您的构造函数explicit,则复制初始化可能会失败,而其他两个将成功。列表初始化不允许缩小转换范围,但对于其他两个都可以。

据我所知,整数两者没有区别。{}语法是为了(但是,不限于,因为它也用于initializer_list)防止程序员触发 http://en.wikipedia.org/wiki/Most_vexing_parse,因此不是std::vector<int> v()初始化v,而是编写std::vector<int> v{};

{}根据用法具有不同的行为,它可以是对构造函数的调用、初始值设定项列表,甚至是值列表,以按定义顺序初始化用户定义类的成员。

最后一个示例:

class Q{
public:
    int a;
    int b;
    float f;
};
int main()
{
    Q q{2, 5, 3.25f};
}