C++ 11变量初始化和声明

And*_*rue 1 c++ coding-style c++11

使用C++ 11提供了一种初始化和声明变量的新方法.

原版的

int c_derived = 0;
Run Code Online (Sandbox Code Playgroud)

C++ 11

int modern{0};
Run Code Online (Sandbox Code Playgroud)

如果有的话,每种方法的优缺点是什么?为什么要实施新方法?编译器有什么不同的做法吗?

Tri*_*dle 6

你错了 - int modern(0)在旧版本的C++中可以使用这种形式(带有圆括号),并且继续在C++ 11中可用.

在C++ 11中,新表单使用大括号来提供统一的初始化,所以你说

int modern{0};
Run Code Online (Sandbox Code Playgroud)

这种新形式的主要优点是它可以在任何地方一直使用.它清楚地表明你正在初始化一个新对象,而不是调用一个函数,或者更糟糕的是,声明一个函数.

它还提供了与表单的C风格("聚合")结构初始化的语法一致性

struct A
{
    int a; int b;
};

A a = { 1, 2 };
Run Code Online (Sandbox Code Playgroud)

当使用花括号形式时,对于缩小数字类型的转换,还有更严格的规则.