gpt4 book ai didi

c++ - header 中定义的 constexpr 变量在编译时多次求值

转载 作者:太空狗 更新时间:2023-10-29 22:57:32 24 4
gpt4 key购买 nike

考虑以下头文件,它包含用于初始化全局变量的慢 constexpr 函数:

constexpr int slow_func() {
for (int i = 0; i < 100*1024*100; ++i)
;
return 0;
}

constexpr int g_val = slow_func();

调用此函数大约需要 10 秒

现在,如果这个 header 被#include 到多个翻译单元中,编译时间会随着#include 这个文件的每个翻译单元而增加

由于有数百个翻译单元,编译现在需要花费不合理的时间。

因为这是一个 constexpr 函数,我假设编译器会只计算一次这个函数的返回值,并在不同的翻译单元中使用相同的值

有没有办法告诉编译器只评估每个“g_val”的值一次?如果不行,怎么办?

我目前使用的是 g++-5.4,但我想标准规定了这种行为(即使我没有在当前标准中找到它)

最佳答案

由于#include 的工作方式,您最好将变量放在某处一次,然后将其设为全局变量,在所有翻译单元中前向声明(通过#including forw.dec.)。这是因为它只需要编译一次,但它在前向声明的任何地方都可以使用它。

当然,它将成为一个全局变量,因此也有缺点。但是将其设为全局应该会阻止它被重新编译。

关于c++ - header 中定义的 constexpr 变量在编译时多次求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43688335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com