C++Primer中:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。ps:顶层const表示指针本身是个常量;底层const表示所指对象是个常量。
例:
const char *m; // 底层const
string t=static_cast<string>(m);
为什么这样的操作合法,而且t是可写的,static_cast难道也去除了const属性?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
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构造一个intstatic_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。代码折叠??
这里用到构造函数string (const char* s);来生成string实例, 即是向编译器保证 不会去更改char* m指向的内存. 实际上, 这里string重新开辟了一段内存, 把char* m的内容进行了拷贝. 所以更改string实例不会更改char* m的内容.