【发布时间】:2022-08-17 19:54:12
【问题描述】:
考虑以下场景:
template <bool expensive>
constexpr auto computeValue() {
// ...
}
void funcA() {
static constexpr auto value_a = computeValue<false>(); // should be at compile time
// ...
}
void funcB() {
static const auto value_b = computeValue<true>(); // should be at runtime
// ...
}
在我的场景中,computeValue<true> 是一项昂贵的计算,并且由于我的系统上的内存不足错误而无法在编译时进行评估。但是,它能够在运行时以可接受的时间量在同一台计算机上运行。 computeValue<false> 没有这个问题,这就是为什么它是在编译时在funcA 中计算的。
问题是编译器仍然试图在编译时评估computeValue<true>(),尽管我忽略了constexpr,随后内存不足。有没有办法强制它离开这个计算进行运行时评估?
-
也许完全不相关,但你不能在运行时评估表达式一次并硬编码源中的值吗?