如果我有:
unsigned int x;
x -= x;
Run Code Online (Sandbox Code Playgroud)
很明显,x 应该这样表达后是零,但到处看,他们说的行为,这种代码是不确定的,而不是仅仅值x(直到减法之前).
两个问题:
这段代码的行为确实未定义吗?
(例如,代码在兼容系统上崩溃[或更糟]?)
如果是这样,为什么 C表示行为是未定义的,当非常清楚x这里应该为零时?
即不在此定义行为给出的优势是什么?
很明显,编译器可以简单地使用它在变量中认为"方便"的任何垃圾值,并且它可以按预期工作......这种方法有什么问题?
尝试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(至少这是我到目前为止所认为的)。 …
我想知道什么时候静态变量初始化为默认值.是否正确加载类时,会创建(分配)静态变量,然后执行声明中的静态初始化和初始化?在什么时候给出默认值?这导致了前向参考的问题.
另外请您解释一下这个问题,为什么静态字段没有及时初始化?特别是Kevin Brock在同一网站上给出的答案.我无法理解第三点.
我的代码出现以下问题:
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++中有以下类:
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为不同的实例设置不同的值,但是已知这些值在实例的生命周期内是不变的.
指望int在Objective-C中始终初始化为0 是否安全?
更具体地说,当int新实例化具有ivars 的对象时,可以安全地假设其ivars的值为0吗?
编译此代码时,我得到错误"初始化元素不是编译时常量".有谁能解释为什么?
#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
在Objective-C中,init方法(即类的指定初始值设定项)和initialize方法之间有什么区别?应该在每个中放入什么初始化代码?
我想为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) 根据我的参考,基本类型具有默认值,对象为空.我测试了一段代码.
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
initialization ×10
java ×4
objective-c ×3
arrays ×2
c++ ×2
static ×2
c ×1
c++03 ×1
cocoa ×1
init ×1
initializer ×1
int ×1
jls ×1
object ×1
size ×1