【问题标题】:Why should I use "int input{0};" instead of "int intput;" [duplicate]为什么要使用“int input{0};”而不是“int输入;” [复制]
【发布时间】:2019-07-29 17:49:20
【问题描述】:

我从 learncpp.com 开始学习 c++。

在解释函数的second lesson中,第一个例子中有一个奇怪的变量初始化:int input{ 0 };

我的 IDE (CLion) 声明:> 预期为“;”在声明的最后。

如果我运行这段代码(使用 gcc),它运行良好。如果我删除括号也是一样的。

那么变量名后面的{}是什么意思?

这是完整的例子:

#include <iostream>

int getValueFromUser()
{
    std::cout << "Enter an integer: ";
    int input{ 0 };
    std::cin >> input;  

    return input;
}

int main()
{
    int num { getValueFromUser() };

    std::cout << num << " doubled is: " << num * 2 << '\n';

    return 0;
}

【问题讨论】:

  • 如果你想学习 C++,我建议你从这些good C++ books之一开始学习
  • 为避免这些警告,请确保将您的 IDE 语言设置设置为至少使用 C++11。

标签: c++


【解决方案1】:

标题有误导性,也许你想问的是 {0} 和 =0 的区别,而不是为什么要初始化一个变量。请澄清问题。

int x{0};将变量初始化为0,等于int x = 0;。这是 C++11 中添加的一个特性。

最佳实践包括初始化发生在变量中。 如果你没有初始化整数并且因为它没有默认构造函数,编译器不会初始化它。

这意味着当您使用它时,它将有一个未定义的值。如果您首先写入,这可能不是问题,但如果您忘记它未初始化并假设它具有默认值,则可能是一个严重的问题。

这是一个在代码中多次出现的小错误:

int n;
int factorial;
cin >> n; 
for(int i = 1; i <=n; i++)
    factorial *= i; // Whops, factorial started with undefined value 

当然是用 1 来初始化它。

【讨论】:

    【解决方案2】:

    答题Why should I use “int input{0};” instead of “int input;”

    int input{0};int input = 0;0 初始化变量inputint input; 未初始化值 input 不确定。如果稍后使用该变量,可能会导致未定义的行为:

    int input;          
    int var = input;           // undefined behavior
    

    更多关于default initialization on cppreference.com的详情

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 2021-09-09
      • 2012-12-20
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多