打印
[经验分享]

const修饰时,对象是否可变

[复制链接]
2195|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elsaflower|  楼主 | 2024-2-19 08:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
区别如下,const所指向的对象,或者修饰对象,是否可变:
const int*p;          // p 可变,p 指向的对象不可变
int const*p;          // p 可变,p 指向的对象不可变
int *const p;          // p 不可变,p指向的对象可变
const int *constp;    //指针p 和p 指向的对象都不可变

如果你经常搞混的话,你可以尝试一下:
先忽略类型名(编译器解析的时候也是忽略类型名),
我们看const 离哪个近。“近水楼台先得月”,离谁近就修饰谁。
const int *p;         //const 修饰*p,p 是指针,*p 是指针指向的对象,不可变
int const *p;         //const修饰*p,p 是指针,*p是指针指向的对象,不可变
int *const p;        //const修饰p,p 不可变,p 指向的对象可变
const int *constp;    //前一个const 修饰*p,后一个const 修饰p,指针p 和p 指向的对象都不可变

世界是在变的,但是一些东西是不变的。抓住某些东西,或许你可以改变Something!!

使用特权

评论回复
沙发
kkzz| | 2024-3-4 14:07 | 只看该作者
const 关键字用于声明一个只读的变量或对象,这意味着一旦该变量或对象被初始化,其值就不能被修改。

使用特权

评论回复
板凳
mickit| | 2024-3-5 22:06 | 只看该作者
在某些其他语言或某些语言的某些上下文中,const 的含义可能会有所不同。例如,在一些JavaScript的上下文中,const 用于声明一个只读引用,而不是实际的值。这意味着声明 const 时所引用的对象本身是可以被修改的,但是 const 所引用的对象的引用不可变。

使用特权

评论回复
地板
wwppd| | 2024-3-7 12:02 | 只看该作者
当const修饰普通变量时,变量一旦初始化之后就不能再更改其值。

使用特权

评论回复
5
tifmill| | 2024-3-10 08:06 | 只看该作者
对于对象是否可变,关键是看const修饰的是对象本身还是对象的引用(指针或引用),以及是如何修饰的。

使用特权

评论回复
6
eefas| | 2024-3-11 20:24 | 只看该作者
当const修饰引用时,如const MyClass& ref;,它表示引用到的对象内容不可变,但可以通过其他途径改变原对象(除非原对象也是const)。

使用特权

评论回复
7
cemaj| | 2024-3-12 16:37 | 只看该作者
当 const 用于声明一个变量时,该变量的值在初始化后不能被改变。

使用特权

评论回复
8
mickit| | 2024-3-12 18:08 | 只看该作者
如果是const修饰的是指针本身,如MyClass* const ptr;,那么指针所指向的对象的成员变量可以被修改,但是指针不可以再指向其他对象。

使用特权

评论回复
9
minzisc| | 2024-3-14 12:46 | 只看该作者
const 用于修饰对象或变量时,确实表示这些对象或变量是不可变的。一旦定义了一个 const 对象,就不能对其进行修改。尝试修改 const 对象将导致编译错误。

使用特权

评论回复
10
sheflynn| | 2024-3-14 15:17 | 只看该作者
当const同时修饰指针及其所指内容时,既不能改变指针本身的值,也不能通过该指针修改所指向内存的内容。

使用特权

评论回复
11
geraldbetty| | 2024-3-15 15:40 | 只看该作者
虽然const对象的值是不可变的,但是它的成员函数仍然可以被调用。如果成员函数修改了对象的内部状态,那么这个修改不会违反const性。

使用特权

评论回复
12
geraldbetty| | 2024-3-16 12:57 | 只看该作者
如果const出现在指针前面,如const int* p;,这意味着p指向的对象是不可变的,但p本身是可以改变的,即它可以指向另一个对象。如果const出现在指针后面,如int* const p;,则意味着p本身是不可变的,但p所指向的对象是可以改变的。

使用特权

评论回复
13
macpherson| | 2024-3-16 16:38 | 只看该作者
const 关键字通常用来声明一个对象、变量或者函数的属性,表明这些元素是不可变的。

使用特权

评论回复
14
sdlls| | 2024-3-17 11:12 | 只看该作者
是否可变取决于具体的语言和 const 的使用上下文。在大多数情况下,const 用于修饰的对象或变量是不可变的,但在某些语言或特殊情况中,它可能表示其他类型的不可变性。

使用特权

评论回复
15
sesefadou| | 2024-3-18 02:19 | 只看该作者
在C语言中,const关键字用于声明变量或指针为只读,即被const修饰的对象在程序执行期间其值不能被修改。

使用特权

评论回复
16
hearstnorman323| | 2024-3-20 14:02 | 只看该作者
如果const直接修饰一个对象,例如const MyClass obj;,则该对象被视为常量对象。对于这样的对象,不能更改其任何成员变量的值,也不能调用任何非const成员函数。这是因为const对象的状态不应该被改变。

使用特权

评论回复
17
biechedan| | 2024-3-20 15:02 | 只看该作者
const类成员函数也不能修改类的任何成员变量。如果一个成员函数被声明为const,那么它就不能修改任何成员变量,也不能调用任何非const的成员函数。这是因为const成员函数保证了不会改变对象的状态,从而可以安全地被多个const对象同时调用。

使用特权

评论回复
18
ccook11| | 2024-3-20 15:48 | 只看该作者
在函数参数中使用const可以保证传入的参数在函数内部不被修改,这有助于提高代码的可读性和健壮性。

使用特权

评论回复
19
sesefadou| | 2024-3-23 18:00 | 只看该作者
指向常量的指针:这种类型的指针可以指向一个常量,但不能通过这个指针修改所指向的值。

cpp`const int *p = &x;  // p 是一个指向常量的指针,可以通过 p 读取 x 的值,但不能通过 p 修改 x 的值`
常量指针:这种类型的指针在初始化后不能改变其指向的地址,但它可以修改所指向的值(除非该值本身也是一个常量)。

cpp`int y = 20;  
int *const q = &y;  // q 是一个常量指针,不能改变 q 的指向,但可以通过 q 修改 y 的值`

使用特权

评论回复
20
lihuami| | 2024-3-23 19:28 | 只看该作者
在C++中,const还可以用于其他用途,如指定函数不会修改传入的参数。例如,void foo(const MyClass& obj)表示函数foo不会修改传入的对象obj。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

1297

帖子

0

粉丝