C++面试八股文:static_cast了解一下?

tsx81429  金牌会员 | 2023-6-21 01:08:49 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 943|帖子 943|积分 2829

某日二师兄参加XXX科技公司的C++工程师开发岗位第20面:
面试官:C++中支持哪些类型转换?
二师兄:C++支持C风格的类型转换,并在C++11引入新的关键字规范了类型转换。
二师兄:C++11引入四种新的类型转换,分别是static_cast、dynamic_cast、const_cast、和reinterpret_cast。
二师兄:static_cast用途最广泛,除了后面三种类型转换外,其他的类型转换都能使用static_cast完成。
二师兄:dynamic_cast主要用于运行时的从父类指针向子类指针转换,如果转换不成功则返回nullptr。
  1. #include <iostream>
  2. struct Base
  3. {
  4.     virtual void fun() {}
  5. };
  6. struct Derived : public Base
  7. {
  8.     virtual void fun() override {}
  9. };
  10. int main(int argc, char const *argv[])
  11. {
  12.     Base* b1 = new Base;
  13.     Base* b2 = new Derived;
  14.     Derived* d1 = dynamic_cast<Derived*>(b1);        //d1 == nullptr
  15.     Derived* d2 = dynamic_cast<Derived*>(b2);        //d2 != nullptr
  16. }
复制代码
二师兄:const_cast主要用于去除指针或引用类型的const属性。此操作可能会导致未定义的行为,所以需要慎用。
[code]#include void function(const int& val){    int& v = const_cast(val);    v = 42;}int main(int argc, char const *argv[]){    int val = 1024;    function(val);    std::cout
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表