c++中的const指针与const引用
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
关键字for他们;事实上,这是被禁止的。
所以你有:
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,它只是一个引用。你不能改变引用的裁判(这就是它存在的原因),所以谈论一致性是没有意义的。在您的示例中,引用只是称为const引用,因为它引用的是const类型。
const关键字在引用的前面意味着const引用到const值,正确吗?
这意味着你不能使用引用来改变对象。
引用引用的对象仍然可以被修改,但不能使用
引用修改:如果它所引用的对象确实是可修改的,那么您可以使用
const_cast
丢弃const-ness,然后修改对象。但是如果对象是不可修改的,那么试图通过抛弃const来修改它,将会调用未定义的行为。
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- 如何在构造函数中传递 const 引用时强制编译器不接受右值
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 对临时对象的Const引用不会延长其生存期
- 对 const 引用参数使用默认值会导致崩溃
- 在运算符重载中使用带有 const 引用的 friend 函数
- C++通过 const 引用传递时不调用派生类函数
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- 为什么要返回对小类成员的 const 引用?
- C - 最好将枚举类作为值或const引用
- RVO:返回由值传递的值,即使显式分配给 const 引用也是如此
- const引用与可变成员的对象
- 每当传递lvalue时,每当通过rvalue传递时,将const引用存储
- 对类成员而不是 getter 的 Const 引用
- 从类型 'Matrix&' 的右值初始化 类型的非 const 引用无效 'Matrix'
- 在函数中使用 const 引用参数访问函数中成员的最佳实践 C++.
- STD ::配对的const引用如何工作
- 为什么我的C 函数拒绝返回const引用