- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在阅读有关 C++11 中的 POD 的文章,我读过的几个地方都提到了支持静态初始化的 POD。例如:
The idea of a POD is to capture basically two distinct properties:
1. It supports static initialization, and
2. Compiling a POD in C++ gives you the same memory layout as a struct compiled in C.
(只有粗体部分是相关的)
A type that is trivial can be statically initialized.
显然我不明白什么是静态初始化。我认为制作全局变量是静态初始化的一个示例,但我可以执行以下操作,但 Foo
不是 POD:
#include <type_traits>
#include <iostream>
struct Foo {
Foo() : x(0), y(0) {}
int x;
int y;
};
struct Bar {
Bar() = default;
int x;
int y;
};
// Apparently the following two lines are not "static initialization" because
// Foo is non-POD yet we can still do this:
Foo f;
Bar b;
int main()
{
if (std::is_pod<Foo>::value) std::cout << "Foo is a POD" << std::endl;
else std::cout << "Foo is *not* a POD" << std::endl;
if (std::is_pod<Bar>::value) std::cout << "Bar is a POD" << std::endl;
else std::cout << "Bar is *not* a POD" << std::endl;
}
Output :
Foo is *not* a POD
Bar is a POD
那么到底什么是静态初始化,它与普通类有什么关系呢?例子会很棒。
最佳答案
静态初始化是使用编译时值初始化某些变量,这样该值最终被“烘焙到”可执行镜像中(不需要实际运行代码):
struct Foo {
int x;
int y;
};
Foo foo = { 0, 1 };
在上面的例子中,struct Foo
是 POD,所以编译器知道它的内存布局只是两个相邻的整数。它还知道 foo.x
应该初始化为 0
,foo.y
应该初始化为 1
。这些信息足以生成foo
在编译时应该如何显示的“内存镜像”,并将其写入可执行镜像。
当图像稍后运行时,操作系统加载器将其内容映射到内存地址,并以这种方式使 foo
“活着”。重要的是 foo
的“初始化”实际上已经在进程(包括您的代码以及来自 C/C++ 运行时的代码,它们首先运行)有时间执行之前完成甚至是单个 CPU 指令。
关于c++ - "static initialization"到底是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15094514/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!