小编icd*_*dae的帖子

为什么我可以在main()之前通过std :: map填充变量?

我在一个旧程序中偶然发现了一些奇怪的行为,并弄清楚为什么G ++和CLang ++允许它发生.我在main()之前声明并初始化了一些全局变量.奇怪的是它们是通过静态std :: map初始化的,它使用下标运算符同时填充.一旦main()运行,一切似乎都在正确的位置,地图的大小显示正确的填充项数以及包含main()之前显示的值的变量.

#include <map>
#include <iostream>

static std::map<int, const char*> staticMap;

const char* const a = staticMap[0] = []()->const char* {return "a";}();
const char* const b = staticMap[1] = []()->const char* {return "b";}();
const char* const c = staticMap[2] = []()->const char* {return "c";}();
const char* const d = staticMap[3] = []()->const char* {return "d";}();
const char* const e = staticMap[4] = []()->const char* {return "e";}();

int main() {
    std::cout << "# Items: " << staticMap.size() << …
Run Code Online (Sandbox Code Playgroud)

c++ initialization stdmap undefined-behavior c++11

4
推荐指数
1
解决办法
287
查看次数

标签 统计

c++ ×1

c++11 ×1

initialization ×1

stdmap ×1

undefined-behavior ×1