为什么要用static_cast转换而不用c语言中的转换?

求大神详细解释下为什么要用static_cast转换而不用c语言中的转换?

全部评论
区别在于转换时的安全检查,尤其是指针类型。 C的强制转换各种指针类型可以随便转,比如char*可以强制转为int*,但用static_cast,这样转会报错。
4 回复 分享
发布于 2017-08-07 23:56
static_cast不是什么类型都可以转换
3 回复 分享
发布于 2017-08-07 00:04
(来自《C++ prime 4th》5.12.7) 标准 C++ 为了加强类型转换的可视性,引入命名的强制转换操作符,为程序员在必须使用强制转换时提供了更好的工具。例如, 非指针的 static_cast 和const_cast 要比 reinterpret_cast 更安全。结果使程序员(以及读者和操纵程序的工具)可清楚地辨别代码中每个显式的强制转换潜在的风险级别。 虽然标准 C++ 仍然支持旧式强制转换符号,但是我们建议,只有在 C 语言或标准 C++ 之前的编译器上编写代码时,才使用这种语法。
点赞 回复 分享
发布于 2017-08-06 14:59
C++引入了新式的转换,包括static_cast,dynamic_cast,reinterpret_cast,和const_cast,较C中的单一强制转换,更加安全,也更容易区分,不同的cast适用不同的情况,若是基本类型的转换,static_cast和C中的没啥区别吧,个人理解,还请大神指出问题
点赞 回复 分享
发布于 2017-08-06 14:39
个人感觉可读性更好,能体现程序员的意图,不清楚是否有什么特别的
点赞 回复 分享
发布于 2017-08-06 21:52
dynamic_cast如果是父类实体到子类的转换会是空指针,而且要求父类有虚函数 static_cast向下转型指针不变,向上转型指针会改变 reinterpret_cast重新解释类型
点赞 回复 分享
发布于 2017-08-10 09:08
这样可以让程序员更加清晰的看到是类型强转,因为本身类型强转就是不安全的
点赞 回复 分享
发布于 2018-03-06 13:15
因为static_cast会在程序编译时就会进行判断该转换是否安全,如果判断不安全的话就会直接报错,而c语言中的强制转换是在运行时进行的,它没有这种判断机制,如果转换不安全的话,会造成运行时的隐患
点赞 回复 分享
发布于 2018-08-20 14:51

相关推荐

点赞 评论 收藏
分享
点赞 6 评论
分享
牛客网
牛客企业服务