Questions tagged «initialization»

3
C ++ 11允许非静态和非const成员的类内初始化。发生了什么变化?
在C ++ 11之前,我们只能对整数或枚举类型的静态const成员执行类内初始化。Stroustrup在他的C ++ FAQ中对此进行了讨论,并给出了以下示例: class Y { const int c3 = 7; // error: not static static int c4 = 7; // error: not const static const float c5 = 7; // error: not integral }; 并进行以下推理: 那么为什么存在这些不便的限制呢?通常在头文件中声明类,并且通常将头文件包含在许多翻译单元中。但是,为避免复杂的链接器规则,C ++要求每个对象都有唯一的定义。如果C ++允许在类中定义需要作为对象存储在内存中的实体,则该规则将被打破。 但是,C ++ 11放宽了这些限制,允许对非静态成员进行类内初始化(第12.6.2 / 8节): 在非委托构造函数中,如果给定的非静态数据成员或基类未由mem-initializer-id指定(包括由于构造函数没有ctor-initializer而没有mem-initializer-list的情况)并且该实体不是抽象类(10.4)的虚拟基类,则 如果实体是具有brace-or-equal-initializer的非静态数据成员,则按照8.5中的指定进行初始化; 否则,如果实体是变量成员(9.5),则不执行初始化。 否则,该实体为默认初始化(8.5)。 …


7
静态变量何时初始化?
我想知道何时将静态变量初始化为其默认值。加载类时,创建(分配)静态变量,然后执行静态初始化程序和声明中的初始化是否正确?在什么时候给出默认值?这导致前向参考的问题。 另外,如果您可以参考“为什么没有及时初始化静态字段?”这一问题进行解释,尤其是Kevin Brock在同一站点上给出的答案。我不明白第三点。

3
将代码添加到__init__.py
我正在研究django中的模型系统如何工作,我注意到一些我不理解的东西。 我知道您创建了一个空__init__.py文件来指定当前目录是一个包。并且您可以在其中设置一些变量,__init__.py以便import *正常工作。 但是django添加了一堆from ... import ...语句,并在中定义了一堆类__init__.py。为什么?这不只是使事情看起来凌乱吗?是否有需要此代码的原因__init__.py?

4
交叉初始化的迹象是什么?
考虑以下代码: #include <iostream> using namespace std; int main() { int x, y, i; cin >> x >> y >> i; switch(i) { case 1: // int r = x + y; -- OK int r = 1; // Failed to Compile cout << r; break; case 2: r = x …

7
(为什么)使用未初始化变量的未定义行为?
如果我有: unsigned int x; x -= x; 很显然,在此表达式之后x 应该为零,但是我所看到的所有地方都说该代码的行为是不确定的,而不仅仅是x(直到减法之前)的值。 两个问题: 此代码的行为确实未定义吗? (例如,代码是否可能在兼容的系统上崩溃?) 如果是这样,为什么C明确表示该行为x为零,为什么还说行为未定义? 即,通过在此不定义行为有什么好处? 显然,编译器可以在变量内部简单地使用它认为“方便”的任何垃圾值,并且可以按预期工作……该方法有什么问题?

6
初始化C ++结构的正确方法
我们的代码涉及一个POD(普通旧数据结构)结构(这是一个基本的c ++结构,其中包含其他结构和POD变量,需要在开始时对其进行初始化。) 根据我所读的文章,似乎: myStruct = (MyStruct*)calloc(1, sizeof(MyStruct)); 应该将所有值初始化为零,如下所示: myStruct = new MyStruct(); 但是,当用第二种方法初始化该结构时,Valgrind随后抱怨说,当使用这些变量时,“条件跳转或移动取决于未初始化的值”。我的理解是否存在缺陷,还是Valgrind抛出假阳性?


4
声明变量有两种类型:“ int char”
我是C ++初学者,正在阅读Bjarne Stroustrup的《编程:使用C ++的原理和实践》。 在关于3.9.2不安全转换的部分中,作者提到了 当初始值设定项是整数文字时,编译器可以检查实际值并接受不暗示变窄的值: int char b1 {1000}; // error: narrowing (assuming 8-bit chars) 我为这个宣言感到困惑。它使用两种类型(int和char)。我以前从未在Java和Swift中看到过这样的声明(我相对熟悉的两种语言)。这是拼写错误还是有效的C ++语法?

7
用一个值初始化整个2D数组
带有以下声明 int array[ROW][COLUMN]={0}; 我得到全零但下面的一个数组 int array[ROW][COLUMN]={1}; 我没有获得所有值的数组。默认值仍为0。 为什么会出现这种现象,以及如何用全1初始化? 编辑:我刚刚了解到,将memsetvalue用作1会将每个字节设置为1,因此每个数组单元的实际值不会为1而是16843009。如何将其设置为1?


7
如何在Java中初始化对象数组
我想初始化一个BlackJack游戏的Player对象数组。我已经阅读了很多有关初始化原始对象(例如,整数数组或字符串数​​组)的各种方法的信息,但是我无法将其理解为我在此处尝试做的事情(见下文)。我想返回一个初始化的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]; } } …

9
在C ++类中初始化静态变量?
我注意到,我在类中的某些函数实际上并未访问该对象,因此我将它们制成了static。然后编译器告诉我,它们访问的所有变量也必须是静态的-到目前为止,还可以理解。我有一堆字符串变量,例如 string RE_ANY = "([^\\n]*)"; string RE_ANY_RELUCTANT = "([^\\n]*?)"; 等等。然后,我将它们全部制成,static const因为它们永不改变。但是,我的程序只有在将它们移出类时才进行编译:否则,MSVC ++ 2010会抱怨“只能在类中初始化静态常数积分变量”。 好吧,这很不幸。有解决方法吗?我想把它们留在他们所属的类中。


4
为什么我们不能通过未初始化的局部变量访问静态内容?
看下面的代码: class Foo{ public static int x = 1; } class Bar{ public static void main(String[] args) { Foo foo; System.out.println(foo.x); // Error: Variable 'foo' might not have been initialized } } 如您所见,尝试x通过未初始化的局部变量Foo foo;代码访问静态字段时会foo.x生成编译错误:Variable 'foo' might not have been initialized。 它可能看起来像这样的错误是有道理的,但直到我们意识到,访问static成员的JVM不实际使用的价值变量,但只有它的类型。 例如,我可以foo使用value进行初始化,null这将使我们能够x毫无问题地进行访问: Foo foo = null; System.out.println(foo.x); //compiles and at …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.