我在使用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
应用于引用本身
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的指针”,并且...
由于volatile往往也很相关,因此标准经常在规范性文本中使用“对cv-(un)限定的引用”来覆盖这两个限定符,这符合您的偏好。