根据以下程序,我可以理解,引用前面的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;
}
答案 0 :(得分:14)
所以混淆是这样的:
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
答案 1 :(得分: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
,但仅限:
S& rs; // (const) reference to a non-const value
S const& rsc; // (const) reference to a const value
可以移动紧跟该类型名称的const
到宣言开始时,以一些混乱为代价
读者。
答案 2 :(得分:7)
引用初始化后无法更改引用。所以谈论“const引用”是没有意义的。参考几乎是值,在这种情况下,值是常量且无法更改。
答案 3 :(得分:6)
是的,const
在引用前面意味着通过它引用的对象被视为const(即,您无法访问非const方法或数据成员)。
无论如何,引用本身总是“const”,因为一旦初始化它就无法修改它以引用不同的对象。
答案 4 :(得分:4)
引用既不是const也不是非const,它只是一个引用。你不能改变参考的裁判(这是它的理由),所以谈论constness是没有意义的。在您的示例中,引用仅称为const引用,因为它引用了const类型。
答案 5 :(得分:3)
引用前面的const关键字表示Const引用const值,是否正确?
这意味着您无法使用引用来更改对象。
引用引用的对象仍然可以修改,但无法修改使用引用:
如果它引用的对象是可以修改的,那么你可以使用const_cast
抛弃常量,然后修改对象。
但是如果对象是不可修改的,那么试图通过抛弃const来修改它,就会调用未定义的行为。