c++ - 为什么我应该使用 "int input{0};"而不是 "int intput;"

标签 c++

<分区>

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

最佳答案

标题误导,可能你想问的是{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 初始化它。

关于c++ - 为什么我应该使用 "int input{0};"而不是 "int intput;",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57259013/

相关文章:

c++ - 将c代码链接到c++代码时的g++链接顺序依赖性

c++ - C++17 std::to_chars 是否添加了一个空终止符?

C++ 类格式化

c++ - 在两个不同的屏幕上全屏显示两个窗口

c++ - 全局 new 和 delete 运算符的定义

c++ - 两个输入函数的 T(n) 运行时间

c++ - 字面量类型在运行时的惊人行为

c++ - 如何以可读格式打印控制字符?

c++ - 在 Windows 中构建 gstreamer 插件所需的环境

c++ - gmock 有没有办法在不调用的情况下返回修改后的输入参数?