根据以下程序,我可以理解,const在引用前面的关键字意味着Const Reference to const value,对吗?
#include <iostream>
using namespace std;
struct s
{
int x;
};
int main(void)
{
s a = {10}, b = {30};
// IN POINTERS ----------------
const s* ptrToConstValue;
ptrToConstValue= &a;
//ptrToConstValue->x = 30;
ptrToConstValue = &b;
s* const constPtrToNonConstVaue = &a;
constPtrToNonConstVaue->x = 40;
//constPtrToNonConstVaue = &b;
const s* const constPtrToConstValue = &a;
//constPtrToConstValue = &b;
//constPtrToConstValue->x = 30;
// IN REFERENCES -------------
const s& seemsToBeConstRefToConstValue = a;
//s = b;
//s.x = 30;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
seh*_*ehe 16
所以混淆是这样的:
X x;
X* px = &x; // pointer to x
X* const px = &x; // *const pointer* to x
const X* px = &x; // pointer to *const x*
X const* px = &x; // identical
const X* const px = &x; // *const pointer* to *const x*
Run Code Online (Sandbox Code Playgroud)
现在参考,'指针部分'总是const:
X& rx = x; // ref to x
X const& rx = x; // ref to const x
const X& rx = x; // identical
Run Code Online (Sandbox Code Playgroud)
Jam*_*nze 11
引用始终是const,因此您不需要const关键字; 事实上,它是被禁止的.
所以你有了:
S* ps; // Non-const pointer to a non-const value
S const* psc; // Non-const pointer to a const value
S* const pcs; // Const pointer to a non-const value
S const* const pcsc; // Const pointer to a const value
Run Code Online (Sandbox Code Playgroud)
, 但是只有:
S& rs; // (const) reference to a non-const value
S const& rsc; // (const) reference to a const value
Run Code Online (Sandbox Code Playgroud)
将const直接跟随类型的名称可以被移动到声明的开头,在有些混乱的成本给读者.
是的,const在引用前面意味着通过它引用的对象被视为const(即,您不能访问非const方法或数据成员).
无论如何,引用本身总是"const",因为在初始化之后,您无法修改它以引用不同的对象.