标签: initialization

(为什么)使用未初始化的变量未定义行为?

如果我有:

unsigned int x;
x -= x;
Run Code Online (Sandbox Code Playgroud)

很明显,x 应该这样表达后是零,但到处看,他们说的行为,这种代码是不确定的,而不是仅仅值x(直到减法之前).

两个问题:

  • 这段代码的行为确实未定义吗?
    (例如,代码在兼容系统上崩溃[或更糟]?)

  • 如果是这样,为什么 C表示行为是未定义的,当非常清楚x这里应该为零时?

    即不在此定义行为给出的优势是什么?

很明显,编译器可以简单地使用它在变量中认为"方便"的任何垃圾值,并且它可以按预期工作......这种方法有什么问题?

c initialization undefined-behavior

77
推荐指数
6
解决办法
1万
查看次数

为什么我们不能使用未初始化的局部变量从该变量的类型访问静态内容?

尝试x通过未初始化的局部变量访问静态字段时,出现Foo foo; foo.x编译错误Variable 'foo' might not have been initialized

class Foo{
    public static int x = 1;

    public static void main(String[] args) {
        Foo foo;
        System.out.println(foo.x); // Error: Variable 'foo' might not have been initialized
    }
}
Run Code Online (Sandbox Code Playgroud)

它可能看起来像这样的错误是有道理的,但直到我们意识到,访问static成员编译器不实际使用的变量,但只有它的类型

例如,我可以foo使用value 进行初始化,null这将使我们能够x毫无问题地进行访问:

Foo foo = null;
System.out.println(foo.x); //compiles and while running prints 1!!! 
Run Code Online (Sandbox Code Playgroud)

之所以如此,x是因为编译器意识到这是静态的,并foo.x像对待其编写时一样对待Foo.x(至少这是我到目前为止所认为的)。 …

java static initialization local-variables jls

76
推荐指数
3
解决办法
3822
查看次数

何时初始化静态变量?

我想知道什么时候静态变量初始化为默认值.是否正确加载类时,会创建(分配)静态变量,然后执行声明中的静态初始化和初始化?在什么时候给出默认值?这导致了前向参考的问题.

另外请您解释一下这个问题,为什么静态字段没有及时初始化?特别是Kevin Brock在同一网站上给出的答案.我无法理解第三点.

java static initialization

74
推荐指数
6
解决办法
12万
查看次数

Array [n] vs Array [10] - 初始化具有变量与实数的数组

我的代码出现以下问题:

int n = 10;
double tenorData[n]   =   {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Run Code Online (Sandbox Code Playgroud)

返回以下错误:

error: variable-sized object 'tenorData' may not be initialized
Run Code Online (Sandbox Code Playgroud)

而使用double tenorData[10]作品.

谁知道为什么?

c++ arrays size initialization

74
推荐指数
1
解决办法
16万
查看次数

在C++中的类初始值设定项中初始化const数组

我在C++中有以下类:

class a {
    const int b[2];
    // other stuff follows

    // and here's the constructor
    a(void);
}
Run Code Online (Sandbox Code Playgroud)

问题是,如何在初始化列表中初始化b,因为我无法在构造函数体内初始化它,因为b是const

这不起作用:

a::a(void) : 
    b([2,3])
{
     // other initialization stuff
}
Run Code Online (Sandbox Code Playgroud)

编辑:这个例子就是我可以b为不同的实例设置不同的值,但是已知这些值在实例的生命周期内是不变的.

c++ array-initialize initialization c++03

73
推荐指数
5
解决办法
12万
查看次数

整体是否始终初始化为0?

指望int在Objective-C中始终初始化为0 是否安全?

更具体地说,当int新实例化具有ivars 的对象时,可以安全地假设其ivars的值为0吗?

int initialization objective-c instance-variables

73
推荐指数
1
解决办法
2万
查看次数

编译错误:"初始化元素不是编译时常量"

编译此代码时,我得到错误"初始化元素不是编译时常量".有谁能解释为什么?

#import "PreferencesController.h"

@implementation PreferencesController

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}


NSImage* imageSegment = [[NSImage alloc] initWithContentsOfFile:@"/User/asd.jpg"];//error here
Run Code Online (Sandbox Code Playgroud)

cocoa compiler-errors initialization global-variables objective-c

73
推荐指数
4
解决办法
10万
查看次数

Objective-C:init vs initialize

在Objective-C中,init方法(即类的指定初始值设定项)和initialize方法之间有什么区别?应该在每个中放入什么初始化代码?

initialization objective-c init initializer

72
推荐指数
2
解决办法
3万
查看次数

如何在Java中初始化对象数组

我想为BlackJack游戏初始化一个Player对象数组.我已经阅读了很多关于初始化原始对象的各种方法,比如一个int数组或一个字符串数组但是我不能把这个概念带到我想要做的事情(见下文).我想返回一个初始化的Player对象数组.要创建的播放器对象的数量是一个整数,我会提示用户.我在想,构造函数可以接受一个整数值,并在初始化Player对象的某些成员变量时相应地命名播放器.我觉得我很亲密,但仍然很困惑.

static class Player
{
    private String Name;
    private int handValue;
    private boolean BlackJack;
    private TheCard[] Hand;

    public Player(int i)
    {
        if (i == 0)
        {
            this.Name = "Dealer"; 
        }
        else
        {
            this.Name = "Player_" + String.valueOf(i);
        }
        this.handValue = 0;
        this.BlackJack = false;
        this.Hand = new TheCard[2];
    } 
}
private static Player[] InitializePlayers(int PlayerCount)
{ //The line below never completes after applying the suggested change
    Player[PlayerCount] thePlayers;
    for(int i = 0; i < PlayerCount + 1; i++)
    {
        thePlayers[i] …
Run Code Online (Sandbox Code Playgroud)

java arrays initialization object

71
推荐指数
4
解决办法
60万
查看次数

Java中的默认值和初始化

根据我的参考,基本类型具有默认值,对象为空.我测试了一段代码.

public class Main {
    public static void main(String[] args) {
        int a;
        System.out.println(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

该行将System.out.println(a);是指向变量的错误a,variable a might not have been initialized而在给定的引用中,该变量integer将具有0默认值.但是,使用下面给出的代码,它实际上会打印出来0.

public class Main {
    static int a;
    public static void main(String[] args) {
        System.out.println(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个代码可能出现什么问题?类实例变量的行为是否与局部变量不同?

java initialization global-variables local-variables default-value

71
推荐指数
4
解决办法
13万
查看次数