在引用定义中使用 constexpr 和 const

Posted

技术标签:

【中文标题】在引用定义中使用 constexpr 和 const【英文标题】:Use of constexpr and const in reference definition 【发布时间】:2017-04-21 05:26:20 【问题描述】:

我在Quora 上看到在 C++ 中将引用变量声明为常量。

static constexpr const int& r = 3;

那么,为什么constexprconst 都在单个语句中使用?

这种陈述的目的是什么?

【问题讨论】:

实用阅读:***.com/questions/14116003/… 目的是什么?我认为是示范。 类似问题,***.com/questions/28614591/…。 constexpr适用于引用,const int是引用的东西,它们有不同的含义 【参考方案1】:

const 变量是初始化后无法修改的变量(例如const int a = 1)。

constexpr 变量是constant expressions,可以在编译时使用。将 constexpr 用于变量声明意味着 const。

但是,在此声明中,const 适用于 int,而 constexpr 适用于 const int&(对 const int 的引用)。

【讨论】:

"这意味着const 是多余的" 几乎没有。 除非我记错了,因为 C++14 constexpr 不再暗示 const @AndyProwl 这是针对成员函数的。 尝试从问题中的代码中删除const。它不会编译。 @M.M 显然,如果您还更改了初始化程序,则可以删除 const。我的观点是:说const 是多余的答案是错误的,因为删除const 改变了含义。

以上是关于在引用定义中使用 constexpr 和 const的主要内容,如果未能解决你的问题,请参考以下文章

C++ constexpr 引用多重定义

未定义的对静态constexpr char []的引用

解读C++ constexpr关键字的特性

哪些值可以分配给 `constexpr` 引用?

为啥我不能使用 constexpr 全局变量来初始化 constexpr 引用类型?

为啥从 constexpr 引用生成的汇编代码与 constexpr 指针不同?