在 C++ 中查看 std::array 的实现,我看到一些我无法完全理解的东西..
例如返回数组第一个元素的函数定义为:
constexpr const-reference
front() const noexcept
{.......}
其中 const-reference 被定义为 const value_type&,因此上面的整个表达式计算为 constexpr const value_type&
。知道在某些情况下我们可能希望在编译时知道函数返回的值,我的问题是为什么他们在同一行上同时使用 constexpr
和 const
? const
不是多余的,因为我们已经说过我们将要返回一个 constexpr
吗?
最佳答案
so the whole expression above evaluates to constexpr const value_type&
不完全是:constexpr
,对于一个函数/方法,意味着这个函数/方法可以在编译时执行(也),而不是返回值是constexpr
.
my question is why are they using both constexpr and const on the same line? isn't the const redundant as it was already said that we are going to be returning a constexpr ?
它在 C++11 中是多余的。
constexpr
是在 C++11 中引入的,在 C++11 中,constexpr
方法也(必然)是一个 const
方法。
这从 C++14 开始改变了(一个很好的解释 here )
因此,从 C++14 开始,consexpr
和 const
(对于方法)是解耦的,如您所见in cppreference ,std::array::front()
非 const
版本是 constexpr
(从 C++17 开始)。
关于c++ - 为了使函数返回编译时常量值,模板中是否需要 constexpr const Type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62984448/