首页 > 后端开发 > C++ > 可以在常量表达式的 C Constexpr 函数中使用引用参数吗?

可以在常量表达式的 C Constexpr 函数中使用引用参数吗?

Mary-Kate Olsen
发布: 2024-11-29 01:54:09
原创
674 人浏览过

Can Reference Parameters Be Used in C   Constexpr Functions for Constant Expressions?

Constexpr 函数和常量表达式中的引用参数

在 C 中,常量表达式是在编译时计算为常量值的表达式 -时间。考虑以下 constexpr 函数:

template <size_t S1, size_t S2>
auto concatenate(const std::array<uint8_t, S1> &data1,
                 const std::array<uint8_t, S2> &data2)
{
    std::array<uint8_t, data1.size() + data2.size()> result; // Possible error here

    return result;
}
登录后复制

使用 Clang 6.0 和 -std=c 17 编译此函数时,由于在运行时评估 data1.size() 表达式,因此无法编译。仅当参数为引用时才会出现此错误,这表明对 constexpr 函数中引用参数的行为存在潜在误解。

根据 C 标准 ([expr.const]/4),表达式是核心常量表达式,如果其求值不涉及求值引用类型的变量或数据成员的 id 表达式,除非它具有可在常量表达式中使用的前置初始化,或者其生命周期在核心常量的求值中开始表达式。

在给定的函数中,引用参数没有预先初始化,导致它们的 size() 表达式非恒定。因此,它们不能在常量表达式中使用,从而导致编译错误。

要解决该问题并在常量表达式中使用引用参数,只需提供前面的初始化或替换 data1.size( ) 和模板参数 S1。

以上是可以在常量表达式的 C Constexpr 函数中使用引用参数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板