社区
C++ 语言
帖子详情
const_cast问题?
babyvox1999
2007-06-27 10:13:46
int main()
{
const int a = 1;
int *p = const_cast<int*>(&a);
*p = 2;
cout <<a<< endl;
cout <<*p << endl;
cout <<&a << endl;
cout <<p << endl;
}
result:
1
2
0x1111
0x1111
...全文
369
8
打赏
收藏
const_cast问题?
int main() { const int a = 1; int *p = const_cast(&a); *p = 2; cout <<a<< endl; cout <<*p << endl; cout <<&a << endl; cout <<p << endl; } result: 1 2 0x1111 0x1111
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
whalefish2001
2007-08-08
打赏
举报
回复
呵呵,明白了,原来如此,结果还是编译器搞的鬼。
如果你不用常量,用一般的变量就不会这样了。
yifanernei
2007-06-27
打赏
举报
回复
应该有很多类似的贴子了
对const类型,一些编译会做优化处理,在运行时对a的使用直接用1代替
而p是个指针,则会正常的取地址,取内容
你可以在调试时看一下编译成的汇编代码,好像可以通过设置来取消这种优化
mochen5460
2007-06-27
打赏
举报
回复
我在VS2005上试过了,确实如此。不明白,mark
taodm
2007-06-27
打赏
举报
回复
google 常量折叠
const_cast的前提是你自己知道自己在做什么。
显然你现在还不知道自己在做什么。
CCH2024
2007-06-27
打赏
举报
回复
学习了。
星羽
2007-06-27
打赏
举报
回复
关于常量叠算
常量叠算(Constant folding)是一个编译器的优化技巧, 指在编译时就对常量表达式进行预求值。
比如表达式 arrPcf[3 + CNT_MACRO] //#define CNT_MACRO 10
在编译之后便被当作 arrPcf[13]。这样有利于提高运行时性能并减少目标代码尺寸。
这种优化通常仅适用于内置的数值,布尔类型。
.....
集体网上找找文章
星羽
2007-06-27
打赏
举报
回复
cout <<a<< endl;
004113F4 mov esi,esp
004113F6 mov eax,dword ptr [__imp_std::endl (4182A8h)]
004113FB push eax
004113FC mov edi,esp
004113FE push 1 // 看这里,编译器优化直接用 1 替换a了 :)
........................
songzhenqiu
2007-06-27
打赏
举报
回复
我在汇编中看过了,在主函数的栈中,a的地址为ebp-4,它的值的确被改变了,但程序可能在其它地方保存这个值。
在cout <<*p << endl;的过程中,压入的参数为p所指向的内存中的数据,就是主函数中a的内容,为2;
而在cout <<a << endl;的过程中,却直接将1压入参数;
所以结果不同。
C++四种类型强制转换——
const
_
cas
t、static_
cas
t、dynamic_
cas
t、reinterpret_
cas
t
文章目录一、
const
_
cas
t1.基本知识2.示例演示二、static_
cas
t1.基本知识2.示例演示三、dynamic_
cas
t1.基本知识2.示例演示四、reinterpret_
cas
t1.基本知识2.示例演示 一、
const
_
cas
t 1.基本知识 (1)
const
_
cas
t只针对指针、引用,当然,this指针也是其中之一。 (2)
const
_
cas
t的大部分使用主要是将常量指针转换为常指针。常量指针指向的空间的内容不允许被修改,但是使用
const
_
cas
t进行强制转换就可以修改。 (3)co.
const
_
cas
t,dynamic_
cas
t,reinterpret_
cas
t,static_
cas
t四种转换的区别
const
_
cas
t,dynamic_
cas
t,reinterpret_
cas
t,static_
cas
t四种转换的区别一,
const
_
cas
t一,dynamic_
cas
t一,reinterpret_
cas
t一,static_
cas
t C++是一种强类型语言,对类型的检查非常严格,我们可以使用C语言中的(NewType)Expression来对某个变量或者表达式返回值进行强转,也可以使用C++中提供...
显示类型转换
const
_
cas
t, static_
cas
t, dynamic_
cas
t, teinterpret_
cas
t的使用
文章目录
const
_
cas
t :: 对
const
和volatile限定符进行擦除static_
cas
t ::常用隐式转型的显示使用dynamic_
cas
t ::检查安全向下转型(继承关系)reinterpret_
cas
t::跨越无关类型的转换reinterpret_
cas
t有何作用当reinterpret_
cas
t面对
const
const
_
cas
t :: 对
const
和volatile限定符进行擦除 主要作用 将
const
和volatile的限定作用擦除(没有真的去除这个变量的限定类型,而实使用另一个变
c++考点之
const
_
cas
t用法
const
_
cas
t
const
_
cas
t:作用:先来看c中不严谨的地方:在c++编译中就会报错:
const
_
cas
t应用场景??不具实际意义的用法:
const
_
cas
t实际编程应用:整体测试代码如下: 最近,身体不太好,可能是坐的时间太久了吧!调理了大概一周的时间,同时,也一周没有学习了!没啥可说的,以后多注意活动活动!进入正题:
const
_
cas
t:作用: 指针或引用的转换符,用来移除变量的
const
或volatile限定符。 先来看c中不严谨的地方:
const
int ca = 30; in
c++类型转换
const
_
cas
t、dynamic_
cas
t、reinterpret_
cas
t、static_
cas
t
const
_
cas
t #include <iostream> using namespace std; /*
const
_
cas
t<要转换类型>(要转换的目标) 1.去掉
const
属性(提供一个可以修改的接口去操作
const
属性的变量) 2.加上
const
属性(用的比较少) */ class A { public: A(
const
char* str) :str(
const
_
cas
t<char *>(str)) {} //this->str=cons
C++ 语言
64,632
社区成员
250,955
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章