显然,在C++20中,consteval将成为一个关键字。目前它的cppreference页面是空白的。它是什么以及它与constexpr有什么关系?
struct A { consteval A() {}; }; constexpr bool g() { auto a = new A; delete a; return true; } int main() { static_asse...
目前你不能使用 static_assert 来验证一个 constexpr 函数的参数,即使它所有调用都是 constexpr 的。 这是有道理的,因为编译器仍然必须创建一个非 constexpr 的实例来处理其他模块对其的调用。 遗憾的是,即使该函数是 static 或在匿名命名空间中,这也...
C++中有一个非常好的常量表达式特性: 它们的计算过程不会有未定义行为(7.7.4.7): 除非遵循[引言.执行]的规则,否则表达式e是核心常量表达式,其评估将评估以下之一: ... 本文档中在[intro]到[cpp]中指定的具有未定义行为的操作[注意:例如,带符号整数溢出([expr...
这可能是一个愚蠢的问题,但我很困惑。我有一种感觉,立即执行 (consteval) 函数必须在编译时执行,我们在二进制代码中无法看到它的函数体。 这篇文章明确支持了我的观点: 引用: 这意味着 [立即执行] 函数仅在编译时可见。不会为该函数发出符号,您不能获取此类函数的地址,并且调试器等工...
考虑以下最小化的代码片段:#include <vector> class Bar { public: constexpr Bar() {} }; consteval Bar foo() { return Bar(); } int main() { st...
在下面的代码中,struct A 具有即时函数默认构造函数,并且使用 new A{} 在动态内存中创建了一个结构体对象: struct A { consteval A() {} }; int main() { new A{}; } 只有Clang接受它。G...
在以下结构定义中,构造函数 A(int) 把它的工作委托给即时函数构造函数 A() : 在下面的代码中,我们使用了一个名为std::vector的STL容器来存储数据:struct A { int i = 0; consteval A() = default; ...