【问题标题】:is constexpr const Type necessary in template in order for functions to return compile time const values?为了使函数返回编译时常量值,模板中是否需要 constexpr const 类型?
【发布时间】:2020-07-19 18:59:22
【问题描述】:

查看 c++ 中 std::array 的实现,我看到了一些我无法完全理解的东西..

例如,返回数组中第一个元素的函数定义为:

constexpr const-reference
front() const noexcept
{.......}

其中 const-reference 定义为 const value_type&,因此上面的整个表达式的计算结果为 constexpr const value_type&。知道在某些情况下我们可能希望在编译时知道函数返回的值,我的问题是为什么它们在同一行上同时使用 constexprconstconst 不是多余的,因为已经说过我们将返回一个 constexpr 吗?

【问题讨论】:

    标签: c++ stl constants constexpr stdarray


    【解决方案1】:

    所以上面的整个表达式计算为 constexpr const value_type&

    不完全是:constexpr,对于一个函数/方法,意味着该函数/方法可以(也)编译时执行,而不是返回值是constexpr

    我的问题是他们为什么在同一行同时使用 constexpr 和 const ?不是 const 是多余的,因为已经说过我们将返回一个 constexpr 吗?

    它在 C++11 中是多余的。

    constexpr 是在 C++11 中引入的,在 C++11 中,constexpr 方法也(必然)是const 方法。

    这从 C++14 开始发生了变化(一个很好的解释 here

    所以,从 C++14 开始,consexprconst(对于一个方法)被解耦,正如你所看到的in cppreferencestd::array::front()const 版本是constexpr (从 C++17 开始)。

    【讨论】:

    • 感谢您的解释,老实说,这个 const 事情变得相当混乱
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2018-01-13
    • 2022-01-16
    • 2020-04-19
    相关资源
    最近更新 更多