条款4:不同编译单元内的non-local static对象的初始化次序
来源:互联网 发布:苏州楼市成交数据 编辑:程序博客网 时间:2024/04/27 22:01
1. 这里关心的问题是:涉及到至少两个源码文件,每一个内至少含一个non-local static对象。问题是:如果某一个编译单元内的某一个non-local static对象的初始化动作使用了另一编译单元内的某个non-local static对象,它使用的对象可能尚未被初始化,因为C++对“定义于不同编译单元内的non-local static对象”的初始化次序并无明确定义。
2. 代码示例
- Filesystem.h文件如下
#ifndef __FILESYSTEM__#define __FILESYSTEM__#include <iostream>class FileSystem{public: FileSystem() :m_size(10){} std::size_t numDisk() const { return m_size; }private: std::size_t m_size;};static FileSystem tfs;#endif // !__FILESYSTEM__
- Directory.h文件如下
#ifndef __DIRECTORY__#define __DIRECTORY__#include <iostream>#include "filesystem.h"extern FileSystem tfs;class Directory{public: Directory() { m_size = tfs.numDisk(); printf("The file size is [%d]\n", m_size); }private: std::size_t m_size;};static Directory tempDir;#endif
- test.cpp文件如下
#include "Directory.h"int main(){ return 0;}
那么输出是啥呢,并不是不确定因素,无论在linux还是windows上,多次输出都是:
The file size is [10]
也就是说,都是Filesystem.h文件先初始化。
3. 是不是示例写的有问题?有没有高手来解答下?
1 0
- 条款4:不同编译单元内的non-local static对象的初始化次序
- 不同编译单元内定义的non-local static 对象的初始化顺序
- 不同编译单元内定义的non-local static 对象的初始化顺序
- effective C++笔记———不同编译单元内定义之non-local static对象的初始化次序问题(真拗口o(╯□╰)o)
- 不同编译单元内定义之non-local static 对象
- 对象被使用之前先被初始化--定义于不同编译单元内的non-local tatic对象
- 不同编译单元内的非局部静态对象的初始化次序问题
- local static对象和non-local static对象在初始化时机上的差异
- C++ local static对象和non-local static对象在初始化时机上的差异
- non-local static对象初始化
- C++不同编译单元内定义的非局部静态对象的初始化顺序
- non-local static对象初始化顺序
- non-local static 变量初始化顺序不确定,带来的问题
- non-local static object初始化顺序的不确定性
- non-local static 变量初始化顺序不确定,带来的问题
- 读书笔记 effective C++ 条款13: initialization list的members 初始化次序应该和其在Class内声明的次序相同
- [C++再学习系列] 跨编译单元的对象初始化
- 对象初始化和销毁的次序
- 疯狂Java笔记:4.2 深入数组
- vue条件渲染
- hdu 3678 Katu Puzzle (2-sat)
- LInux最常用的20条命令
- arm汇编指令
- 条款4:不同编译单元内的non-local static对象的初始化次序
- 前端面试题
- Linux--进程间通信之消息队列
- oozie常用语句
- leetcode [Remove Element]
- HDU 5916 Harmonic Value Description【思维构造题目】(2016中国大学生程序设计竞赛(长春)F题)
- seleniumWebDriver的API操作_10_1
- 图像的傅里叶变换
- base64