c++ - static_cast强制转型疑问
巴扎黑
巴扎黑 2017-04-17 11:30:58
[C++讨论组]

C++Primer中:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。ps:顶层const表示指针本身是个常量;底层const表示所指对象是个常量。

例:

const char *m;      // 底层const
string t=static_cast<string>(m);

为什么这样的操作合法,而且t是可写的,static_cast难道也去除了const属性?

巴扎黑
巴扎黑

全部回复(3)
PHPz

const char *的意思是pointer to const char,不是const pointer to char,它就是个普通指针而已,本身不是const,所以你可以用static_cast把它转型成string
刚才没看清你的问题,重新答一下
static_cast<T>(x)的语义差不多是这样的:以x为参数构造一个T类型的返回值,这个转型的过程必需是在编译期可以确定的。
如果有const int x=10
static_cast<int>(x)是正确的,因为你可以从一个const int构造一个int
static_cast<const int &>也是正确的,因为你可以依据const int获得一个const int &
static_cast<int &>是不正确的,因为你不能从const int获得一个int &,此时必需用const_cast
在你的例子中,你的确可以从const char *正常构造一个std::string,因为std::string有这么一个构造函数。
但是你不能从const char *构造一个int,只能得到一个const int

怪我咯

代码折叠??

迷茫
const char *m;      // 底层const
string t=static_cast<string>(m);

这里用到构造函数string (const char* s);来生成string实例, 即是向编译器保证 不会去更改char* m指向的内存. 实际上, 这里string重新开辟了一段内存, 把char* m的内容进行了拷贝. 所以更改string实例不会更改char* m的内容.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号