在C ++中初始化变量的正确方法是什么

我有以下代码:

bool c (a == b);

bool c {a == b};

其中a和b是一些相同类型的变量。

我想知道,以上两个初始化有什么区别?在什么情况下应该首选哪个?任何帮助将不胜感激。

马克西姆·埃格鲁什金

两种形式都是直接初始化

使用花括号{}进行初始化检查会缩小转换范围,如果发生这种转换,则会生成错误。不像()gcc在这方面是有问题的,需要-Werror=narrowing缩小范围时需要编译器选项才能生成错误。)

花括号的另一种用途{}统一初始化:使用相同的语法在有构造函数和无构造函数的情况下初始化两种类型,例如:

template<class T, class... Args>
T create(Args&&... args) {
    T value{std::forward<Args>(args)...}; // <--- uniform initialization + perfect forwarding
    return value;
}

struct X { int a, b; };
struct Y { Y(int, int, int); };

int main() {
    auto x = create<X>(1, 2);    // POD
    auto y = create<Y>(1, 2, 3); // A class with a constructor.
    auto z = create<int>(1);     // built-in type
}

使用花括号{}进行初始化的唯一缺点是它与auto关键字的交互auto推导{}std::initializer_list,这是一个已知问题,请参阅“自动和括号初始列表”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C ++(98、11和14)中初始化静态数据成员的正确方法是什么?

在C中创建和初始化包含函数指针的结构的正确方法是什么?

在 C++ 中初始化指向结构的指针的正确方法是什么?

C ++中未初始化变量的默认值是什么?

c ++对象中静态变量的默认初始化值是什么?

C ++初始化中的“几个值”是什么?

在 C++ 中初始化布尔向量的标准方法是什么

在C ++中初始化结构内数组的正确方法

在C中初始化const变量

始终在C中初始化变量

目标C-是什么使静态变量仅初始化一次?

在C ++中,“在复制初始化上下文中进行默认初始化”是什么意思?

初始化我的数字变量的正确方法是什么?

在C中,未初始化的数组中char的默认值是什么?

以下短语在C ++中是什么意思:零,默认和值初始化?

在C中,未初始化的布尔数组的默认值是什么?

[N ... M]在C聚合初始化程序中是什么意思?

C语言中的初始化数组中的“ movq”和“ movw”是什么意思?

C ++初始化的结果是什么?

C,变量初始化

在 Linux i2c 驱动程序中进行特定于芯片的初始化的正确功能是什么

C ++内联初始化成员变量的正确方法

为什么const变量不需要在C中初始化?

C ++类中的两种不同的变量初始化。有什么不同?

在 C 中,变量的多次初始化不会引发错误。为什么?

如何在c中全局初始化变量,静态和外部有什么区别?

在C ++ 14中初始化唯一指针向量的正确方法

从C数组初始化std :: array的正确方法

初始化COM C ++服务多线程的正确方法