C++11之强制类型转换(static_cast,const_cast,dynamic_cast,reinterpret_cast)

简介: C++11之强制类型转换(static_cast,const_cast,dynamic_cast,reinterpret_cast)

前言

为解决C旧式类型转换的缺点,C++导入4个新的转换操作符:static_cast,const_cast,dynamic_cast,reinterpret_cast。

过去的编写习惯:(type)expression

现在应该是:static_cast<type>(expression)


static_cast

主要用于数据丢失转化。

比如将一个整形转换为一个双精度浮点类型。这种类型转换的写法易读性更高。

  int firstNum = 2;
  int secondNum = 3;
  // C风格
  double result = ((double)firstNum) / secondNum;
  // C++风格
  double result2 = static_cast<double>(firstNum) / secondNum;


const_cast

用于改变表达式中的常量性或易变性。

比如将一个常量对象传参时当作非常量对象时就会报错。

解决方法:

void test(string* str)
{
  cout << "string" << endl;
}
int main()
{
  const string* str = new string("222");
  test(const_cast<string*>(str));
  return 0;
}


或者将易变量传参时当作非常量对象时也会出错。

解决方法:

void test(string* str)
{
  cout << "string" << endl;
}
int main()
{
  volatile string* str = new string("222");
  test(const_cast<string*>(str));
  return 0;
}


dynamic_cast

将父类的指针(引用)安全的转换为子类的指针(对象) 要求父类必须有虚函数

例如

reinterpret_cast

因为这个操作符的转换结果依赖于平台,所以不具有移植性。

一般用于转换函数指针的类型



目录
相关文章
|
5月前
|
人工智能 机器人 测试技术
【C++】static_cast基本用法(详细讲解)
【C++】static_cast基本用法(详细讲解)
115 0
|
5月前
|
安全 编译器 程序员
【C++入门到精通】C++类型的转换 | static_cast | reinterpret_cast | const_cast | dynamic_cast [ C++入门 ]
【C++入门到精通】C++类型的转换 | static_cast | reinterpret_cast | const_cast | dynamic_cast [ C++入门 ]
38 0
|
5月前
|
人工智能 安全 机器人
【C++】dynamic_cast基本用法(详细讲解)
【C++】dynamic_cast基本用法(详细讲解)
|
5月前
|
人工智能 安全 机器人
【C++】const_cast基本用法(详细讲解)
【C++】const_cast基本用法(详细讲解)
|
1天前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
1天前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
3天前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
16 3
|
3天前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
13 2
|
3天前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
33 1
|
3天前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
10 1