考虑以下头文件,它由慢速 constexpr 函数组成,用于初始化全局变量:
constexpr int slow_func() {
for (int i = 0; i < 100*1024*100; ++i)
;
return 0;
}
constexpr int g_val = slow_func();
调用这个函数大约需要 10 秒
现在,如果这个头文件在多个翻译单元中被#included,编译时间会随着每个翻译单元#includes这个文件的增加而增加
有数百个翻译单元,编译现在需要不合理的时间。
由于这是一个 constexpr 函数,我假设编译器只会计算一次该函数的返回值,并在不同的翻译单元中使用相同的值
有没有办法告诉编译器只评估每个“g_val”的值一次?如果没有,可以做什么?
我目前正在使用 g++-5.4,但我认为标准规定了这种行为(即使我在当前标准中没有找到它)