【问题标题】:C++11 Variable Initialization and DeclarationC++11 变量初始化和声明
【发布时间】:2013-12-16 12:34:47
【问题描述】:

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

原创

int c_derived = 0;

C++11

int modern{0};

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

【问题讨论】:

  • C++11 的新特性可能会让人困惑,因为它看起来类似于函数声明!
  • 我想你是想说int modern{0};
  • 这在 C++11 之前就存在了。大括号是添加的内容。
  • 使用可读的int x = 0IMO
  • 好的。谢谢。我正在阅读的书有(),如果大括号并说它是新的。

标签: c++ c++11 coding-style


【解决方案1】:

你错了——int modern(0) 形式(带圆括号)在旧版本的 C++ 中可用,并且在 C++11 中继续可用。

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

int modern{0};

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

它还提供了与 C 风格(“聚合”)结构初始化的语法一致性,形式为

struct A
{
    int a; int b;
};

A a = { 1, 2 };

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

【讨论】:

  • 好的。我正在阅读的书使用 () 而不是 {}。这更多是个人喜好还是 int A = 1;将来会被弃用吗?我应该改用新方法吗?
  • 我不这么认为。我认为 c++ 11 大括号初始化最显着的优势是可以调用默认构造函数的能力。 informit.com/articles/article.aspx?p=1852519 所以,基本类型的初始化使用等号(=)永远不会被弃用。
  • 使用花括号还可以避免缩小转换:stroustrup.com/C++11FAQ.html#narrowing
【解决方案2】:

使用大括号只是尝试在 C++11 中引入通用初始化。

现在您可以使用大括号来初始化数组、变量、字符串、向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2015-09-17
    相关资源
    最近更新 更多