【问题标题】:Variable initialization guidelines in C++ [closed]C ++中的变量初始化指南[关闭]
【发布时间】:2015-05-31 11:15:51
【问题描述】:

在 C++ 中初始化变量的准则是什么?在 C++ 中有很多方法可以初始化变量。我熟悉的3种方式如下:

1) int a=3;

2) int a(3);

3) int a{3}; // 适用于 C++11 及更高版本

哪种方法最好?为什么第二种方式 int a(3);在 C++ 程序中不常见且不使用?
谢谢。

【问题讨论】:

  • 这是相当基于意见的。你如何定义“最好”?你只关心整数,还是类和结构?这是完全不同的。
  • 第二种选择很难阅读,实际上对编译器来说同样困难。 a 是函数还是变量?相关阅读:Most vexing parse。在这种情况下,它按预期工作,但要小心使用该语法。
  • 不要忘记 int a = {3}; 和 int a = int(3); auto a = 3;(以及所有其他变体)
  • @meet 是的,你甚至可以做int a = int();
  • @WesleyShillingford "you can even do int a();" 仔细阅读 Joachim 的评论和链接。

标签: c++ c++11 initialization


【解决方案1】:

前两个初始化具有完全相同的效果。我猜大多数人更喜欢第一个选项而不是第二个选项,因为它看起来更自然。

然而,第三个选项有不同的规则:它禁止缩小转换。所以虽然你可以做

int a = .3;

并得到一个等于零的int,

int a {.3};

将是编译时错误。因此,大括号初始值设定项的优点是它可以阻止您在意外情况下进行此类转换,并强制您明确声明您是否真的想要缩小转换。

【讨论】:

  • 大括号初始化器是 C++11 的一个特性,所以如果你为C++11 之前的编译器编写,你就不能使用它。 (不确定我是否理解您的评论)顺便说一句,即使在编译 C++11 之前的代码时,您的编译器也可能会警告您缩小转换范围。
  • @meet 正如我所写,替代方案之间没有区别。您可以使用任何“看起来更漂亮”的东西,而这取决于意见,我们不会在 SO 上争论。
猜你喜欢
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
相关资源
最近更新 更多