C++Primer中:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。ps:顶层const表示指针本身是个常量;底层const表示所指对象是个常量。
例:
const char *m; // 底层const
string t=static_cast<string>(m);
为什么这样的操作合法,而且t
是可写的,static_cast
难道也去除了const属性?
C++Primer中:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。ps:顶层const表示指针本身是个常量;底层const表示所指对象是个常量。
例:
const char *m; // 底层const
string t=static_cast<string>(m);
为什么这样的操作合法,而且t
是可写的,static_cast
难道也去除了const属性?
const char *m; // 底层const
string t=static_cast<string>(m);
这里用到构造函数string (const char* s);来生成string实例, 即是向编译器保证 不会去更改char* m指向的内存. 实际上, 这里string重新开辟了一段内存, 把char* m的内容进行了拷贝. 所以更改string实例不会更改char* m的内容.
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答496 阅读✓ 已解决
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
。