[英]const pointers vs const references in C++
根据以下程序,我可以理解,引用前面的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;
}
所以混淆是这样的:
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*
现在参考,'指针部分'总是const:
X& rx = x; // ref to x
X const& rx = x; // ref to const x
const X& rx = x; // identical
引用总是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
, 但只有:
S& rs; // (const) reference to a non-const value
S const& rsc; // (const) reference to a const value
紧跟在类型名称后面的const
可以移动到声明的开头,代价是对读者有些困惑。
初始化后,引用无法更改。 所以谈论“const引用”是没有意义的。 参考几乎就是值,在这种情况下,值是常量,也不能改变。
是的,引用前面的const
意味着通过它引用的对象被视为const(即,您不能访问非const方法或数据成员)。
无论如何,引用本身总是“const”,因为在初始化之后,您无法修改它以引用不同的对象。
引用既不是const也不是非const,它只是一个引用。 你不能改变参考的裁判(这是它的理由),所以谈论constness是没有意义的。 在您的示例中,引用仅称为const引用,因为它引用了const类型。
引用前面的const关键字表示Const引用const值,对吗?
这意味着您无法使用引用更改对象。
引用所引用的对象仍然可以修改,但不能使用引用进行修改:
如果它所引用的对象是可以修改的,那么你可以使用const_cast
抛弃const-anss然后修改对象。
但是如果对象是不可修改的,那么试图通过抛弃const来修改它,将调用未定义的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.