水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
1/1
|
转到
主题:今天用到const_cast很奇怪更改了const地址存储的值但是输出还是
楼主
|
nextworld8
|
2024-09-01 16:53:04
|
只看此ID
今天用到const_cast很奇怪更改了const地址存储的值但是输出还是原值
需要处理const产量的值,调试显示正常的,但是作为右值使用时候还是原值
不知道那里出问题了?
--
FROM 223.104.40.*
1楼
|
allegro
|
2024-09-15 17:38:18
|
只看此ID
拖出去,乱棍打死。
--
FROM 58.246.155.*
2楼
|
ble
|
2024-09-16 14:53:50
|
只看此ID
const_cast是为了让你绕过const的修饰修改某些值,如果这些值本身是可变的话。
但是你非要对一个本身是不变的东西,通过const_cast来修改,标准说了这是UB。有可能cout里面的age早就被替换成了字面常量了。
【 在 nextworld8 的大作中提到: 】
: 今天用到const_cast很奇怪更改了const地址存储的值但是输出还是原值
:
: 需要处理const产量的值,调试显示正常的,但是作为右值使用时候还是原值
: ...................
--
FROM 111.199.252.*
3楼
|
poggy
|
2024-09-18 11:30:49
|
只看此ID
【 在 nextworld8 的大作中提到: 】
: 今天用到const_cast很奇怪更改了const地址存储的值但是输出还是原值
:
: 需要处理const产量的值,调试显示正常的,但是作为右值使用时候还是原值
: ...................
原值能写才会写,
真正的const不能写, const_cast 估计会做一次写时拷贝,
也就是临时创建一个新空间地址拷贝过去做副本, 以后的写入只针对副本。
--
FROM 115.171.245.*
4楼
|
nextworld8
|
2024-09-18 14:00:37
|
只看此ID
谢谢了
查了一下规范 应该操作上数 仅支持指针或者引用变量
直接对产量取取地址转换 编译器估计做了处理
【 在 poggy 的大作中提到: 】
:
: 原值能写才会写,
: 真正的const不能写, const_cast 估计会做一次写时拷贝,
: ...................
--
FROM 223.104.41.*
5楼
|
namelij
|
2024-09-26 17:39:23
|
只看此ID
常量折叠呀,多古老的玩意
--
FROM 36.110.46.*
6楼
|
foliver
|
2024-09-26 19:47:25
|
只看此ID
gcc的话,编译器直接从符号表中取出常量内容,你可以把它定义成const volilate int 就可以正常用cast了,这是编译器会强制从内存中取了。
【 在 nextworld8 的大作中提到: 】
: 谢谢了
:
: 查了一下规范 应该操作上数 仅支持指针或者引用变量
: ...................
--来自微水木3.5.10
--
FROM 183.193.17.*
7楼
|
nextworld8
|
2024-09-26 20:39:33
|
只看此ID
好的 多谢了
- 来自 水木社区APP v3.5.7
【 在 foliver 的大作中提到: 】
: gcc的话,编译器直接从符号表中取出常量内容,你可以把它定义成const volilate int 就可以正常用cast了,这是编译器会强制从内存中取了。
--
FROM 223.104.41.*
8楼
|
nextworld8
|
2024-09-26 22:26:26
|
只看此ID
好的,谢谢。
不是一回事
【 在 namelij 的大作中提到: 】
: 常量折叠呀,多古老的玩意
--
FROM 223.104.41.*
1/1
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版