问题标签 [variable-initialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
628 浏览

javascript - 我应该用默认值初始化 JavaScript 中的变量吗?

我有一个 AngularJS 控制器。我在顶部的绑定变量中遵循John Papa指南。我的问题是:在声明变量时使用默认值初始化变量是否有任何性能提升,或者对性能产生不利影响?

我在 AngularJS 上下文中问过这个问题。然而,这是一个通用的 JavaScript 问题。

更新:下面的场景呢?

0 投票
1 回答
270 浏览

c++ - 隐式声明的默认构造函数采用什么形式?

所以假设我正在使用这个玩具示例:

我知道默认构造函数不会默认初始化member。因此,如果我这样做,member仍然未初始化:const Foo implicit_construction. 顺便说一句,这似乎工作正常:const Foo value_initialization = Foo()尽管我的理解是这实际上并没有使用默认构造函数。

如果我Foo这样改变:

我尝试这样做const Foo defaulted_construction,不出所料,它的行为implicit_constructionmember未初始化完全一样。

最后,如果我改成Foo这样:

我这样做:const Foo defined_construction member 零初始化的。我只是想弄清楚隐式定义的构造函数是什么样的。我本来会的Foo(){}。不是这样吗?是否还有其他一些黑魔法在起作用,使我定义的构造函数的行为与默认构造函数不同?


编辑:

也许我在这里被误导了。defaulted_construction肯定是未初始化的。
虽然defined_construction肯定是初始化的。

我认为这是标准化的行为,这是不正确的吗?

0 投票
4 回答
211 浏览

java - 对静态块的渴望初始化

当我试图更好地理解事物时,我意识到我知道的有多少。对不起,如果这听起来像一个简单或愚蠢的问题。

我们真的需要静态块吗,如果它仅用于初始化静态变量而没有在块中编码任何其他逻辑。我们可以直接对那些静态变量进行急切的初始化,对吧?因为据我了解,静态块在类加载时执行,静态变量的初始化也是如此。如果它只是用于变量初始化,那么让静态变量急切初始化是不够的,而不是为此拥有一个专有的静态块。

例如,采用以下代码,并将其称为案例 1。

和下面的代码,称之为案例2。

因此,不要在案例 1 和案例 2 中给出相同的结果或性能。在这种情况下(出于任何目的,例如将所有数据初始化在一个地方左右),静态块是否完全必要,而案例 2 的目的是清晰明了?我错过了什么?

0 投票
3 回答
969 浏览

c++ - 我可以用三进制初始化 char[] 吗?

我问了一个关于它的问题,并没有得到一个非常明确的答案,但是在阅读了这篇文章const char[]之后,我开始更喜欢const char*.

使用三元进行初始化时遇到了困难。鉴于const bool bar,我试过:

  1. const char foo[] = bar ? "lorem" : "ipsum"这给了我错误:

错误:初始化程序无法确定foo

  1. const char foo[] = bar ? { 'l', 'o', 'r', 'e', 'm', '\0' } : { 'i', 'p', 's', 'u', 'm', '\0' }这给了我错误:

{错误:令牌之前的预期主表达式

有没有办法const char []用三元初始化 a ,还是我必须切换到const char*这里?

0 投票
1 回答
42 浏览

java - 为什么将变量初始化封装到初始化块中允许在声明之前进行初始化?

考虑以下代码:

显然,当我们尝试初始化一个未声明的变量时,它不会编译。

然而,将语句封装到初始化块中,使其编译成功:

使声明之前的初始化有效的初始化块的这个“特征”是什么?

在问这个问题之前,我阅读了几篇关于 SO 初始化块的帖子,但它们似乎主要解决了初始化顺序的问题(例如静态与非静态)。

0 投票
3 回答
701 浏览

c - 有没有办法在 C 中确保一个函数在没有 pthread_once 的情况下只调用一次?

C中,有没有办法确保一个函数只被调用一次而不使用pthread_once

以下内容有效C++但显然无效,C因为静态变量的初始化必须是常量(因为我解释了编译错误)

我认为使用逗号运算符可能会解决这个问题,但这也不起作用:

编译这两个结果会导致以下编译错误:

有什么方法可以避免这种情况并确保一个函数只被调用一次(从调用函数范围)而不使用pthread_once

具体来说,如果它被调用一次,我不想提前返回func()func(),我对只从调用函数范围调用一次的编译时保证感兴趣——即类似于C++处理上述代码的方式。
(换句话说,上面的代码对C++编译器是合法的,它确保只调用一次 - 有没有func()等效的方法来做到这一点?)Cpthread_once

编辑:
我在原始帖子中并没有理想地表达这一点:我正在寻找一个不涉及包装器/帮助器函数或变量的解决方案;即我很想知道语言中是否有一个结构C允许这种情况的处理方式与它的处理方式相同C++。jxh 的解决方案最适合,利用gcc扩展。

0 投票
1 回答
92 浏览

c++ - 如何修复静态类成员的初始化顺序?

以下代码是抛出 SIGSEGV 还是按预期工作取决于目标文件在 makefile 中出现的顺序(在我的例子中是 .pro)。我对仅以正确的顺序维护它们不是很有信心。是否对我的来源进行了简单的更改,从而消除了对目标文件正确顺序的依赖?

这些是源文件,归结为一个简短的示例。

dummy0.h

dummy0.cpp

顾名思义,未来还会有Dummy1......Dummy<n>

unittestclass.h

unittestclass.cpp

main.cpp

当我在程序失败dummy0.cpp之前有[注意:有趣的是,之前的行不会失败]。稍后出现时,一切都很好。这暗示了一个问题,即当目标文件的顺序不利时,可能会在初始化之前使用 testlist!?unittestclass.cpptestlist.push_back(ptr)testlist.size()push_backdummy0.cpp

我怎样才能避免依赖这个订单?

[我目前使用 c++11、QtCreator 3.5.1、g++ 5.4.0、GNU ld 2.26.1。]

0 投票
1 回答
387 浏览

c++ - 为什么用 operator = 引用有效,但用构造函数引用无效?

据我所知,以下陈述是相同的:

标题:

但是当使用引用时它不会编译

得到编译错误,说明 m_a 不是类型名称,但是当使用 = 执行此操作时,它可以工作:

0 投票
1 回答
53 浏览

c# - 由于 int 数据类型的初始化,在运行时显示内存问题

运行程序后,我只能为第一个学生插入数据,之后它只显示我应该插入的内容,但没有给我这样做的权利。没有编译错误。虽然我认为问题出在我分配变量时,但这可能是一个问题,因为我不知道是否应该用 0 初始化 int。如果我不初始化变量,我会得到很多编译错误。另外,在我的情况下,为什么它会显示带有随机数字“48”的学生电话号码?

我还将在这里显示结果:

0 投票
0 回答
39 浏览

java - 详细的初始化过程类变量初始化器

关于以下几点,我看到了许多令人困惑的答案:

接下来,按照文本顺序执行类的类变量初始化程序静态初始化程序,或者接口的字段初始化程序,就好像它们是一个块一样。

类变量初始化程序是否包括实例初始化程序块?和静态初始化器包括静态块?还是只包含变量?

如果不是 intiliaztion 的顺序在哪里: https://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.4.2

例如。: