c++;双重初始化-默认值? 我调试了一些C++代码,遇到了一个从未显示过值的双。它与行一起声明 double x; 以前没有使用C或C++,我不确定双击是否有默认值?也就是说,在给出上述声明的情况下,如果x从来没有明确给出一个值,它会自动为0,还是为空

c++;双重初始化-默认值? 我调试了一些C++代码,遇到了一个从未显示过值的双。它与行一起声明 double x; 以前没有使用C或C++,我不确定双击是否有默认值?也就是说,在给出上述声明的情况下,如果x从来没有明确给出一个值,它会自动为0,还是为空,c++,C++,X用于代码中其他地方的计算,计算结果将显示给用户-目前它不是。。。计算结果如下: y*asin(sin(x/y)*sin(a*b)); 我假设如果x默认为0,这将导致编译/运行时错误?如果x默认为0,那么计算肯定会返回0,并且0将显示给用户?如果未指定初始化值,则如果双x的值位于堆/堆栈上,则该值未定义。如果是全局变量,则将其设置为0。如果未指定初始化值,则如果双x的值位于堆/堆栈上,则该值未定义。如果是全局变量,它将被设置为0。这取决于变量的声明位置 如果它被声明为全局变量,那么在main开

X用于代码中其他地方的计算,计算结果将显示给用户-目前它不是。。。计算结果如下:

y*asin(sin(x/y)*sin(a*b));

我假设如果x默认为0,这将导致编译/运行时错误?如果x默认为0,那么计算肯定会返回0,并且0将显示给用户?

如果未指定初始化值,则如果双x的值位于堆/堆栈上,则该值未定义。如果是全局变量,则将其设置为0。

如果未指定初始化值,则如果
双x
的值位于堆/堆栈上,则该值未定义。如果是全局变量,它将被设置为0。

这取决于变量的声明位置

如果它被声明为全局变量,那么在
main
开始运行之前,它将被初始化为零

如果它被声明为函数中的非静态局部变量,那么它的值是不确定的(实际上,它将是变量占用的内存中的任何内容,它看起来是随机的)

使用未初始化(非静态)的局部变量会导致错误。

这取决于变量的声明位置

如果它被声明为全局变量,那么在
main
开始运行之前,它将被初始化为零

如果它被声明为函数中的非静态局部变量,那么它的值是不确定的(实际上,它将是变量占用的内存中的任何内容,它看起来是随机的)

使用未初始化(非静态)的局部变量会导致错误

零初始化在以下情况下执行:

  • 对于每个具有静态或线程本地存储持续时间的命名变量,在任何其他初始化之前,不受常量初始化的约束(自C++14起)
  • 作为非类类型和无构造函数的值初始化类类型成员的值初始化序列的一部分,包括未提供初始值设定项的聚合元素的值初始化
  • 当使用太短的字符串文字初始化任何字符类型的数组时,该数组的其余部分初始化为零
  • 因此,没有构造函数的类中的双数据成员将被初始化为零

    零初始化在以下情况下执行:

  • 对于每个具有静态或线程本地存储持续时间的命名变量,在任何其他初始化之前,不受常量初始化的约束(自C++14起)
  • 作为非类类型和无构造函数的值初始化类类型成员的值初始化序列的一部分,包括未提供初始值设定项的聚合元素的值初始化
  • 当使用太短的字符串文字初始化任何字符类型的数组时,该数组的其余部分初始化为零

  • 因此,没有构造函数的类中的双数据成员将被初始化为零。

    今天这里有很多RTFM问题如果声明在函数的作用域内,则不要将默认值指定给x(默认值到底是什么?)!您必须自己编写
    double x=0.0是否在某些函数中?@Raxvan:除非是静态存储持续时间:-)今天这里有很多RTFM问题如果声明在函数的作用域内,则不要将默认值指定给x(默认值到底是什么?)!您必须自己编写
    double x=0.0是否在某些函数中?@Raxvan:除非它是静态存储持续时间:-)如果它是类的成员怎么办?@athos则取决于声明包含对象的位置,以及类对成员执行的初始化。如果它是类的成员怎么办?@athos则取决于声明包含对象的位置,以及类对成员所做的初始化。