问题标签 [static-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 投票
2 回答
3604 浏览

c++ - 在命名空间中初始化 const 对象

我在初始化命名空间中的一些 const 对象时遇到了问题。我有一个如下命名空间:

如果我调试初始化,我可以看到两者HIBYE获得字符串文字。继续执行到 initialziae HI_AND_BYE,但是当我们进入createHiAndByeVector()函数时,两者HIBYE没有值了。push_back()然后我在该方法中遇到分段错误。如果我查看调用堆栈,我会看到以下行:__static_initialization_and_destruction_0(). 到底是怎么回事?我的对象在构建后会立即被销毁吗?

0 投票
0 回答
216 浏览

c++ - 为什么编译器没有为我的未实例化模板类的静态成员变量生成代码?

这个问题很难说,主要是因为术语类实例化与模板实例化。我有一个充满静态函数和成员的模板类。此模板的每个特化都需要在首次使用之前完成一些初始化。

我最初的计划是只给模板类一个静态initializer成员,它将在动态初始化的构造过程中初始化模板类的静态成员。

但是,这是行不通的。除非我在initializer类中显式调用代码,否则编译器不会为它生成任何代码或存储。

例如:

输出只是“异步”。

但是,如果我将其更改为调用WorkerPool<T>::async()调用_initializer.foo(),那么初始化程序确实会被编译并正确构造,正如我所期望的那样。

为什么编译器拒绝为我的静态成员生成代码?

我用 Visual Studio 2010/2012、gcc 和 clang 进行了测试,都产生了相同的结果;我的静态成员没有构造。这让我认为标准需要这种行为,但我无法理解为什么会这样。

0 投票
2 回答
19195 浏览

c++ - 结构参数的默认值

假设我有以下结构:

我想在调用以下函数时将此结构初始化为默认值。如果有帮助,我正在寻找一个简单的零初始化。

然而,这段代码给了我编译错误。我试过VS2003和VS2008。

注意:我看过其他提到使用构造函数的答案。但是,我希望用户查看我用于初始化的值。

0 投票
1 回答
2574 浏览

java - Powermock - @SupressStaticInitializationFor 不起作用

我有一个包含本机方法的类和一个静态初始化程序,它加载一个 dll 并用 powermock 模拟它,以便应该抑制静态初始化程序并且不应该加载 dll。

该类如下所示:

在 windows 下,测试使用 maven 成功执行(在 eclipse 和 cmd 中)。但是当我让我们的 CI 服务器(一个 unix 系统)构建项目时,所有的测试都会出错。

测试看起来像这样:

令我困惑的是,我得到一个 java.lang.UnsatisfiedLinkError 说明尽管静态初始化程序应该被抑制,但无法加载 dll。

版本:

  • 模拟:1.9.0
  • PowerMock:1.4.12
  • JDK:1.7

此外,我必须将此添加到 pom.xml 作为解决此问题的方法:PowerMock 问题

这是我得到的堆栈跟踪:

是否有任何已知问题或解决此问题的方法?

0 投票
1 回答
362 浏览

c++ - 如何使用内部类的类型初始化模板类中的静态字段

我有这样的东西

我得到的错误说::16: error: expected constructor, destructor, or type conversion before ‘*’ token

0 投票
1 回答
155 浏览

java - 如何知道静态块初始化是否已运行?

我试图摆脱一些内存泄漏。我想从类加载器中重置所有类(不仅是我的)的所有静态变量。有一个classes属性列出了 ClassLoader 已知的所有类。

所以我只想循环它并通过反射将静态变量设置为空。

问题是所有这些类都不一定被初始化(静态块初始化没有运行)。由于目的是重置值然后卸载类,因此没有必要初始化这些类。此外,当我重置另一个类 CHILD 的 SBI 中使用的类 ROOT 时,运行 CHILD 的 SBI 可能会导致意外行为......

所以问题是:有没有办法知道 SBI 是否已由 JVM 运行。


笔记:

对于任何建议使用 ClassLoader 的 findLoadedClass 的人,规范中有这么重要的一句话:*在这篇文章中,有一个重要说明:“已加载”并不意味着“已初始化”。初始化只发生在 JLS3 $12.4.1 定义的精确时刻 *

0 投票
3 回答
13197 浏览

static - Go中的静态初始化?

我目前正在编写 Go Lang 教程,但在其中一个练习中遇到了问题:

https://tour.golang.org/methods/23

这个练习让我实现了一个 ROT13 密码。我决定使用从字节到其旋转值的映射来实现密码,但我不确定初始化此映射的最佳方法。我不想使用文字来初始化地图,但更愿意通过循环遍历字母并在循环中设置(键,值)对来以编程方式进行。我还希望地图只能从 Rot13Reader 结构/对象访问,并且所有实例(?)共享同一个地图(而不是每个 Rot13Reader 一个副本)。

这是我目前正在运行的 Go 程序:

以下是我遇到的问题:

  • 我不想rot13Map准备main()
  • 我不想rot13Map在全球范围内。
  • 我不希望 a 的每个副本rot13Reader都有一个单独的rot13Map

有没有办法在 Go 中实现我想要的?

0 投票
3 回答
627 浏览

java - Java 静态块的 C++ 替代方案

我正在编写一个日期类,我想要一个静态地图将“Jan”映射到 1 等等。我想知道如何初始化该静态地图。这就是我目前正在做的事情,但我只是觉得与 Java 中的静态块相比,额外的 if 语句不优雅。我知道 C++ 程序的编译要复杂得多,但我仍然想知道是否存在更好的解决方案。

0 投票
6 回答
240 浏览

java - 由于静态初始化而调用的构造函数

我正在阅读 Bruce Eckel 第 4 版的 Thinking in Java。在初始化和清理一章中,第 189 页第二段中的第一个要点提到:

即使它没有显式使用 static 关键字,构造函数实际上也是一个静态方法。

我有以下代码:

如果它说的是真的应该调用 Foo 的构造函数。我看不到以下代码会发生这种情况。

输出是:

有人可以澄清这是什么意思吗?

我已尽力引用这本书。我认为该陈述之前或之后的部分与该问题的上下文中的该陈述没有太大关系。

谢谢,

古吉

0 投票
2 回答
1831 浏览

c# - C# 中静态初始化程序的线程安全

每个人都说静态初始化器是线程安全的,但我担心一个特定的细节。

假设我有

C# 保证以下哪一项MyStaticClass.myField尚未初始化?

  1. 如果线程 1 和 2 尝试一起访问myField(按该顺序),GetNewObject将在线程 2 读取之前开始myField执行。

  2. 如果线程 1 和 2 尝试一起访问myField(按该顺序),GetNewObject将在线程 2 读取之前完成myField执行。

一般来说,CLR 怎么样:如果它的保证与 C# 的不同,那么它们在哪些方面不同?
.NET 框架的最新版本中的行为是否发生了变化?

笔记:

这是一个棘手的问题,我认为完整的答案可能会提到 static constructor和 static initializer之间的区别,以及它们如何交互beforefieldinit以产生声称的结果。