为什么要使用“ int input {0};”而不是“ int intput”;

时间:2019-07-29 17:49:20

标签: c++

我已经开始从learningcpp.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;
}

2 个答案:

答案 0 :(得分:2)

标题具有误导性,也许您想问{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。

答案 1 :(得分:1)

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

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

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

有关default initialization on cppreference.com

的更多详细信息