问题标签 [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.
javascript - 我应该用默认值初始化 JavaScript 中的变量吗?
我有一个 AngularJS 控制器。我在顶部的绑定变量中遵循John Papa指南。我的问题是:在声明变量时使用默认值初始化变量是否有任何性能提升,或者对性能产生不利影响?
我在 AngularJS 上下文中问过这个问题。然而,这是一个通用的 JavaScript 问题。
更新:下面的场景呢?
c++ - 隐式声明的默认构造函数采用什么形式?
所以假设我正在使用这个玩具示例:
我知道默认构造函数不会默认初始化member
。因此,如果我这样做,member
仍然未初始化:const Foo implicit_construction
. 顺便说一句,这似乎工作正常:const Foo value_initialization = Foo()
尽管我的理解是这实际上并没有使用默认构造函数。
如果我Foo
这样改变:
我尝试这样做const Foo defaulted_construction
,不出所料,它的行为implicit_construction
与member
未初始化完全一样。
最后,如果我改成Foo
这样:
我这样做:const Foo defined_construction
member
是零初始化的。我只是想弄清楚隐式定义的构造函数是什么样的。我本来会的Foo(){}
。不是这样吗?是否还有其他一些黑魔法在起作用,使我定义的构造函数的行为与默认构造函数不同?
编辑:
也许我在这里被误导了。defaulted_construction
肯定是未初始化的。
虽然defined_construction
肯定是初始化的。
我认为这是标准化的行为,这是不正确的吗?
java - 对静态块的渴望初始化
当我试图更好地理解事物时,我意识到我知道的有多少。对不起,如果这听起来像一个简单或愚蠢的问题。
我们真的需要静态块吗,如果它仅用于初始化静态变量而没有在块中编码任何其他逻辑。我们可以直接对那些静态变量进行急切的初始化,对吧?因为据我了解,静态块在类加载时执行,静态变量的初始化也是如此。如果它只是用于变量初始化,那么让静态变量急切初始化是不够的,而不是为此拥有一个专有的静态块。
例如,采用以下代码,并将其称为案例 1。
和下面的代码,称之为案例2。
因此,不要在案例 1 和案例 2 中给出相同的结果或性能。在这种情况下(出于任何目的,例如将所有数据初始化在一个地方左右),静态块是否完全必要,而案例 2 的目的是清晰明了?我错过了什么?
c++ - 我可以用三进制初始化 char[] 吗?
我问了一个关于它的问题,并没有得到一个非常明确的答案,但是在阅读了这篇文章const char[]
之后,我开始更喜欢const char*
.
使用三元进行初始化时遇到了困难。鉴于const bool bar
,我试过:
const char foo[] = bar ? "lorem" : "ipsum"
这给了我错误:
错误:初始化程序无法确定
foo
const char foo[] = bar ? { 'l', 'o', 'r', 'e', 'm', '\0' } : { 'i', 'p', 's', 'u', 'm', '\0' }
这给了我错误:
{
错误:令牌之前的预期主表达式
有没有办法const char []
用三元初始化 a ,还是我必须切换到const char*
这里?
java - 为什么将变量初始化封装到初始化块中允许在声明之前进行初始化?
考虑以下代码:
显然,当我们尝试初始化一个未声明的变量时,它不会编译。
然而,将语句封装到初始化块中,使其编译成功:
使声明之前的初始化有效的初始化块的这个“特征”是什么?
在问这个问题之前,我阅读了几篇关于 SO 初始化块的帖子,但它们似乎主要解决了初始化顺序的问题(例如静态与非静态)。
c - 有没有办法在 C 中确保一个函数在没有 pthread_once 的情况下只调用一次?
在C
中,有没有办法确保一个函数只被调用一次而不使用pthread_once
?
以下内容有效C++
但显然无效,C
因为静态变量的初始化必须是常量(因为我解释了编译错误)
我认为使用逗号运算符可能会解决这个问题,但这也不起作用:
编译这两个结果会导致以下编译错误:
有什么方法可以避免这种情况并确保一个函数只被调用一次(从调用函数范围)而不使用pthread_once
?
具体来说,如果它被调用一次,我不想提前返回func()
func()
,我对只从调用函数范围调用一次的编译时保证感兴趣——即类似于C++
处理上述代码的方式。
(换句话说,上面的代码对C++
编译器是合法的,它确保只调用一次 - 有没有func()
等效的方法来做到这一点?)C
pthread_once
编辑:
我在原始帖子中并没有理想地表达这一点:我正在寻找一个不涉及包装器/帮助器函数或变量的解决方案;即我很想知道语言中是否有一个结构C
允许这种情况的处理方式与它的处理方式相同C++
。jxh 的解决方案最适合,利用gcc
扩展。
c++ - 如何修复静态类成员的初始化顺序?
以下代码是抛出 SIGSEGV 还是按预期工作取决于目标文件在 makefile 中出现的顺序(在我的例子中是 .pro)。我对仅以正确的顺序维护它们不是很有信心。是否对我的来源进行了简单的更改,从而消除了对目标文件正确顺序的依赖?
这些是源文件,归结为一个简短的示例。
dummy0.h
:
dummy0.cpp
:
顾名思义,未来还会有Dummy1
......Dummy<n>
unittestclass.h
:
unittestclass.cpp
:
main.cpp
:
当我在程序失败dummy0.cpp
之前有[注意:有趣的是,之前的行不会失败]。稍后出现时,一切都很好。这暗示了一个问题,即当目标文件的顺序不利时,可能会在初始化之前使用 testlist!?unittestclass.cpp
testlist.push_back(ptr)
testlist.size()
push_back
dummy0.cpp
我怎样才能避免依赖这个订单?
[我目前使用 c++11、QtCreator 3.5.1、g++ 5.4.0、GNU ld 2.26.1。]
c++ - 为什么用 operator = 引用有效,但用构造函数引用无效?
据我所知,以下陈述是相同的:
标题:
但是当使用引用时它不会编译
得到编译错误,说明 m_a 不是类型名称,但是当使用 = 执行此操作时,它可以工作:
c# - 由于 int 数据类型的初始化,在运行时显示内存问题
运行程序后,我只能为第一个学生插入数据,之后它只显示我应该插入的内容,但没有给我这样做的权利。没有编译错误。虽然我认为问题出在我分配变量时,但这可能是一个问题,因为我不知道是否应该用 0 初始化 int。如果我不初始化变量,我会得到很多编译错误。另外,在我的情况下,为什么它会显示带有随机数字“48”的学生电话号码?
我还将在这里显示结果:
java - 详细的初始化过程类变量初始化器
关于以下几点,我看到了许多令人困惑的答案:
接下来,按照文本顺序执行类的类变量初始化程序和静态初始化程序,或者接口的字段初始化程序,就好像它们是一个块一样。
类变量初始化程序是否包括实例初始化程序块?和静态初始化器包括静态块?还是只包含变量?
如果不是 intiliaztion 的顺序在哪里: https://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.4.2
例如。: