consteval相关内容

使用consteval而不是conexpr函数有什么好处?

我知道需求的不同,我最感兴趣的是它带来的代码质量带来的好处。 我能想到的几件事: 读者只需阅读函数签名即可知道该函数是在编译时计算的 编译器可能会发出较少的代码,因为constevalFN从不在运行时使用(这只是推测,我没有这方面的真实数据) 不需要有变量来强制ctfe,最后的示例 注意:如果代码质量太模糊,我理解有些人可能想结束这个问题,对我来说,代码质量并不是那个模糊的术 ..
发布时间:2022-05-16 18:39:59 C/C++开发

约束将允许在函数参数上使用static_assert吗?

当前,即使对它的所有调用确实是constexpr,也无法使用static_assert来验证constexpr函数的参数. 这是有道理的,因为在某些其他模块尝试调用该函数的情况下,编译器仍必须为此函数创建一个非constexpr实例. 不幸的是,即使函数是static或在匿名名称空间中,情况也是如此. C ++ 20将引入一个新的关键字consteval,它类似于constexpr,但是它不 ..
发布时间:2020-08-01 19:07:31 C/C++开发

为什么约束函数允许未定义的行为?

C ++中的常量表达式具有非常整洁的特性:它们的求值不能具有未定义的行为( 表达式e是核心常量表达式,除非按照抽象机([intro.execution])的规则对e求值将对以下值之一进行求值: ... 一种操作,该操作将具有本文档[intro]至[cpp]中指定的未定义行为[注意:例如,包括带符号整数溢出([expr.prop]),某些指针算术([ expr.add]),除以零或某些 ..
发布时间:2020-08-01 19:06:25 C/C++开发

什么是避孕药?

显然,consteval将成为C ++ 20中的关键字. "cppreference"页面目前为空白.它将是什么?它与constexpr有什么关系? 解决方案 它声明立即函数,即必须在编译时求值以产生常数的函数. (在以前的版本中,它以前是constexpr!的拼写.)相反,constexpr函数可以在编译时或运行时求值,而不必在所有情况下都产生常数. 采用的论文为 P1073R3 ..
发布时间:2020-08-01 19:06:21 C/C++开发

是否允许编译器在运行时调用立即(恒定)函数?

这可能是一个愚蠢的问题,但是我很困惑.我感觉在编译期间必须执行即时(consteval)函数 ,而我们根本无法在二进制文件中看到其主体. 这篇文章明显支持我的感觉: 这意味着[immediate]函数仅在编译时可见.该函数不会发出符号,您不能使用该函数的地址,并且调试器之类的工具将无法显示它们.在这种情况下,立即函数类似于宏. 在赫伯·萨特(Herb Sutter)的出版物: ..
发布时间:2020-04-27 04:44:45 C/C++开发