“常量引用”实际上不应该称为“对常量的引用”吗?

问题描述 投票:0回答:1

我在使用constexpr引用时想到了这种感觉。但是问题本身与constexpr无关,只是被它揭示了。

[我们知道有“指向const的指针”,也有“ const指针”。顺便说一句,由于后者的用法要比前者少得多,因此实际上通常使用它们的名称来引用前者。无论如何,对于引用没有这种区别,因为它们不可重新绑定。因此,我们只有“ const引用”,而没有“ const引用”。这是通用术语,在标准中也是is used。但这对我来说似乎不正确。

让我们看一些著名的例子,并用这个通用术语进行评论:

      int    i = 0;   // Value
      int*  pi = &i;  // Pointer to i
const int* cpi = &i;  // Pointer to const i
int const* cpi = &i;  // Pointer to const i (east-const style)
int* const pci = &i;  // Const pointer to i
      int&  ri = i;   // Reference to i
const int& rci = i;   // Const reference to i
int const& rci = i;   // Const reference to i (east-const style)

现在让我们仔细看一下上面的几行:

const int* cpi = &i;  // Pointer to const i
const int& rci = i;   // Const reference to i

const int*声明“指向const的指针”,而const int&声明“ const引用”。声明中的顺序相同,含义不同。这里显然有矛盾之处。但是,如果我们称其为“对const的引用”,那么不一致就消失了。双方的顺序相同。

随着constexpr的引入,紧张加剧了]]

constexpr int& cri = i;  // Constexpr reference to i
constexpr const int& crci = i;  // Constexpr const reference to i

“ Constexpr const”参考? ??文档clearly says

在对象声明中使用的constexpr说明符表示const

引用是一个对象。那么,当const已经为constepxr时,为什么还要i呢?看起来很沮丧。

但是在“引用const”的帮助下,不再沮丧。我们将crci称为“对const i的constexpr引用”。现在很明显,const应用于引用的对象,而constexpr应用于引用本身

,说明了它可以在constexpr上下文中使用的事实。而且它是const,因为所有引用都是const。很有道理。为了使其与指针更加一致,我们甚至可能使用以下假设语法:
const int& constexpr crci = i;   // Constexpr reference to const i
const int* const      pci = &i;  // Const pointer to const i (perfect consistency)

但是无论好坏,C ++都不是这样。

“引用const”的概念确实帮助我理解了“ constexpr const引用”。

您怎么看? “引用const”的概念听起来是否令人信​​服?

我在使用constexpr引用时想到了这种感觉。但是问题本身与constexpr无关,只是被它揭示了。我们知道存在“指向const的指针”,并且...

c++ pointers language-lawyer constexpr
1个回答
0
投票

由于volatile往往也很相关,因此标准经常在规范性文本中使用“对cv-(un)限定的引用”来覆盖这两个限定符,这符合您的偏好。

© www.soinside.com 2019 - 2024. All rights reserved.