考虑以下程序:
#include <iostream>
#include <type_traits>
constexpr int f() {
if (std::is_constant_evaluated())
return -1;
else return 1;
}
int main() {
int const i = f();
std::cout << i;
}
当运行时,它打印-1
(wandbox)。
然而,如果我在编译时评估时使函数throw
:
#include <iostream>
#include <type_traits>
constexpr int f() {
if (std::is_constant_evaluated())
throw -1; // <----------------------- Changed line
else return 1;
}
int main() {
int const i = f();
std::cout << i;
}
在wandbox上,it 编译成功并输出1。为什么我没有得到编译失败的结果呢?
constexpr
函数中抛出异常会导致第二个程序未定义行为。 - NathanOliveri
被标注为constexpr
,则无法编译。 - Pilar Latiesa