|
|
1
3
这与MSVC编译器一起工作,但是GNU C++没有(至少对我来说)。GNU链接器将除去编译单元之外未使用的所有符号。我只知道一种保证这种初始化的方法——“init once”习惯用法。例如: 一次。h:
单位:H:
第二次:CPP:
|
|
|
2
0
我觉得你不想
|
|
3
0
编辑
.
编译、链接和创建以及使用
一般来说,构造函数只用于(并且应该被使用)初始化类的成员。 |
|
|
4
0
这可能有效,但很危险。单个模块中的全局/静态构造顺序是未定义的,模块加载顺序也是未定义的(除非您明确管理它)。例如,假设在secondary.c initialize()ctor运行期间,已经存在i。您必须非常小心,不要让两个模块初始化相同的公共数据,或者让两个模块执行具有重叠副作用的初始化。 我认为解决这种需求的更清洁的设计是让公共数据的所有者(您的主模块)将其公开为全局单例,并提供一个接口来执行所需的任何数据初始化。您有一个控制init顺序的中心位置,甚至可以控制并发访问(使用关键部分或其他并发原语)。按照您的简化示例,这可能是- / 主模块(MAIN.C) / 包括: 类公用 { INTI;
让二级模块在运行时的受控时间调用这些接口(和 不 在全球通行证期间)。 (注:您将文件命名为C文件,但将问题标记为C++。建议的代码当然是C++。 |
|
5
0
我可以问一下,当您可以使用
此数组在第一次调用函数时被延迟初始化。 您可以这样使用它:
这看起来容易得多,也不容易出错。它不是多线程兼容,直到C++0x。 |
|
|
Tom Buck · c#程序在整数列表上冻结 8 年前 |
|
|
Ran Lavi · 在c中初始化结构的指针++ 8 年前 |
|
|
Js_zero · 在c++中实例化对象有几种方法,它们之间有什么区别 8 年前 |
|
|
jfernal · 节点。js在加载其他函数之前等待初始化变量 8 年前 |
|
|
Victor · 在javafx中运行时更改标签文本 8 年前 |
|
|
blubb · 在Kotlin中是否有更惯用的方法来初始化此映射? 8 年前 |
|
|
Bing Bang · 初始化包含字节数组的结构数组 8 年前 |