consteval相关内容
在下面的代码中struct A有立即函数的默认构造函数,结构的对象通过new A{}的方式在动态内存中创建: struct A { consteval A() {} }; int main() { new A{}; } 只有Clang才接受它。 GCC抱怨 error: the value of '' is not usa
..
clang(干线)显示以下代码错误: consteval void f() {} int main() { f(); // error: call to consteval function 'f' is not a constant expression // note: subobject of type 'void' is not initializ
..
我知道需求的不同,我最感兴趣的是它带来的代码质量带来的好处。 我能想到的几件事: 读者只需阅读函数签名即可知道该函数是在编译时计算的 编译器可能会发出较少的代码,因为constevalFN从不在运行时使用(这只是推测,我没有这方面的真实数据) 不需要有变量来强制ctfe,最后的示例 注意:如果代码质量太模糊,我理解有些人可能想结束这个问题,对我来说,代码质量并不是那个模糊的术
..
以下程序 template consteval auto foo(const T&) { return 0; } template consteval auto bar(const T& t) { auto n = foo(t); return n; } int main() { static_assert(foo("abc")
..
当前,即使对它的所有调用确实是constexpr,也无法使用static_assert来验证constexpr函数的参数. 这是有道理的,因为在某些其他模块尝试调用该函数的情况下,编译器仍必须为此函数创建一个非constexpr实例. 不幸的是,即使函数是static或在匿名名称空间中,情况也是如此. C ++ 20将引入一个新的关键字consteval,它类似于constexpr,但是它不
..
C ++中的常量表达式具有非常整洁的特性:它们的求值不能具有未定义的行为( 表达式e是核心常量表达式,除非按照抽象机([intro.execution])的规则对e求值将对以下值之一进行求值: ... 一种操作,该操作将具有本文档[intro]至[cpp]中指定的未定义行为[注意:例如,包括带符号整数溢出([expr.prop]),某些指针算术([ expr.add]),除以零或某些
..
显然,consteval将成为C ++ 20中的关键字. "cppreference"页面目前为空白.它将是什么?它与constexpr有什么关系? 解决方案 它声明立即函数,即必须在编译时求值以产生常数的函数. (在以前的版本中,它以前是constexpr!的拼写.)相反,constexpr函数可以在编译时或运行时求值,而不必在所有情况下都产生常数. 采用的论文为 P1073R3
..
我正在尝试探究inline函数的含义,并偶然发现了这个问题.考虑这个小程序(演示): /* ---------- main.cpp ---------- */ void other(); constexpr int get() { return 3; } int main() { std::cout
..
这可能是一个愚蠢的问题,但是我很困惑.我感觉在编译期间必须执行即时(consteval)函数 ,而我们根本无法在二进制文件中看到其主体. 这篇文章明显支持我的感觉: 这意味着[immediate]函数仅在编译时可见.该函数不会发出符号,您不能使用该函数的地址,并且调试器之类的工具将无法显示它们.在这种情况下,立即函数类似于宏. 在赫伯·萨特(Herb Sutter)的出版物:
..