【问题标题】:C++: Variable initialization using x{0} [duplicate]C++:使用 x{0} 进行变量初始化 [重复]
【发布时间】:2013-12-21 22:52:27
【问题描述】:

我看到了一个对我来说是新的初始化语法。我在 google 和 here 上搜索过,但找不到有用的东西。

int a = 0;
int a = {0};
int a{0}; // <- this is new for me    

为什么我需要第三种样式而其他样式存在?两者到底有什么区别?

谢谢。

【问题讨论】:

  • 第三个解决了 Scott Meyers 所说的“C++ 中最令人头疼的解析”。在某些情况下,int a(var) 可能会被误解为函数声明而不是构造变量。 en.wikipedia.org/wiki/Most_vexing_parse

标签: c++


【解决方案1】:

您可能对C++11 initializer lists 感兴趣。它们可能无法解释第三个示例,但它们很有用,尤其是对于真正的类对象。

您的代码 int a{0}; 在 C++11 中称为 uniform initialization。另见most vexing parse wikipage(由Joe Z 评论)。

花时间至少阅读C++11 wikipage。 C++11 的新特性使它几乎是一种与 C++03 不同的语言。

【讨论】:

    【解决方案2】:

    这种形式的初始化在 C++11 中称为列表初始化

    当与内置类型的变量一起使用时,列表初始化在一个方面有所不同:如果初始化器可能导致信息丢失,则不能列出内置类型的初始化变量。

    double pi = 3.1415926;
    int a(pi); //fine
    int a{pi}; //compile error
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 2018-03-01
      • 2013-02-22
      • 1970-01-01
      相关资源
      最近更新 更多