为了账号安全,请及时绑定邮箱和手机立即绑定

C ++中的变量初始化

C ++中的变量初始化

C++
慕村9548890 2019-08-02 16:30:12
C ++中的变量初始化我的理解是int变量将0自动初始化; 但事实并非如此。下面的代码打印一个随机值。int main () {        int a[10];     int i;     cout << i << endl;     for(int i = 0; i < 10; i++)         cout << a[i] << " ";     return 0;}什么规则(如果有的话)适用于初始化?具体来说,在什么条件下变量自动初始化?
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

如果是,它将自动初始化

  • 它是一个类/结构实例,其中默认构造函数初始化所有基本类型; 喜欢MyClass instance;

  • 你使用数组初始化语法,例如int a[10] = {}(全部归零)或int a[10] = {1,2};(除了前两项之外全部归零:a[0] == 1a[1] == 2

  • 同样适用于非聚合类/结构,例如MyClass instance = {}; (有关这方面的更多信息,请点击此处

  • 它是一个全局/外部变量

  • 定义变量static(无论是在函数内还是在全局/命名空间范围内) - 谢谢Jerry

永远不要相信自动初始化的普通类型(int,long,...)的变量!它可能发生在像C#这样的语言中,但不会发生在C&C ++中。


查看完整回答
反对 回复 2019-08-02
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

int不会初始化为零。当你说int i;,你所做的只是为整数保留空间。该位置的值未初始化。这只是你说的int i = 0;(或者int i = 5;在这种情况下,值被初始化为5)。无论如何,将变量初始化为某个已知值是一种很好的做法。否则,i保留为该存储空间保留的任何随机值。这就是cout打印出随机值的原因。

默认值取决于语言的实现。有些语言会将其初始化为某种“理智”值(或许可能为0)。作为一个经验法则,我总是初始化为一些明智的值的变量(除非我知道我将它初始化到别的东西肯定之前,我使用它)。正如我之前提到的那样,假设价值是理智的,这是不明智的。它可能是也可能不是(取决于语言,或该语言的解释器/编译器的实现)。


查看完整回答
反对 回复 2019-08-02
?
跃然一笑

TA贡献1826条经验 获得超6个赞

请参见4.9.5 C ++编程语言的初始化。

根据您的变量是否为本地,静态,用户定义或const默认初始化可能发生。

因为您正在使用POD(普通旧数据类型),所以自动变量不会初始化为任何默认值。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 717 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信