C++类型转换

简介: C++类型转换

构造的方式转换

#include<iostream>
using namespace std;
int main()
{
  int num = (int)1.11;  //C语言的方式转换
  int numm = int(1.11); //C++方式的转换
  cout << num << endl;
  cout << numm << endl;
  system("pause");
  return 0;
}

static_cast类型转换

类似C语言的强制转换

static<转换的类型>(要转换的目标(可以是常量,也可以是表达式))

按照C++的说法,比起C语言的更加安全

有二种形式的转换

1.基本数据类型的转换

2.空指针转化为目标指针

3.注意:不能够去掉const属性,但是可以增加const属性

//static_cast类型
#include<iostream>
using namespace std;
int main()
{
  //基本数据类型的强制转换
  int num = static_cast<int>(1.11);
  //空指针类型的转换
  double* p = new double(1.11);
  void* pvoid = static_cast<void*>(p);
  //不能操作const类型
  //可以增加const属性,但是不能够去掉const属性
  int number = 11;
  const int num = static_cast<const int>(number);
  const int count = 1;
  int* p1 = (int * )(&count);  //C语言强制类型转换
  int* p2 = static_cast<int*>(count);  //错误使用,不能够去掉const属性
  system("pause");
  return 0;
}

const_cast类型

const_cast 有两个功能

1.去掉const属性(提供一个可以修改的接口,去操作const属性)

2.增加const属性(用的比较少)

/const_cast类型
#include<iostream>
using namespace std;
int main()
{
  const int date = 1;
  int* p1 = const_cast<int*>(&date);
  system("pause");
  return 0;
}

但是需要注意的是,它只是提供了一个接口

#include<iostream>
using namespace std;
int main()
{
  const int date = 1;
  int* p1 = const_cast<int*>(&date);
  *p1 = 1001;
  cout << "date = " << date <<  endl;
  cout << "p1 = " << *p1 << endl;
  system("pause");
  return 0;
}

进行赋值的时候,原来的数据还是原来的数据,不受赋值数据的影响

案例

//案例
#include<iostream>
#include<string>
using namespace std;
class MM
{
public:
  MM(const char * name):name(const_cast<char *> (name)){}  //C++对const更加严格,这
  //里函数形参用了const,初始化列表类型转换下
private:
  char* name;
};
int main()
{
  MM mm("温柔了岁月");
  system("pause");
  return 0;
}

reinterpret_cast类型

1.它可以把指针转换成整数

2.整数转换成指针

3.指针的效果依然存在

这个类型有点鸡肋,认识了解即可

//reinterpret_cast类型
#include<iostream>
#include<string>
using namespace std;
int main()
{
  int* p = reinterpret_cast<int*>(0); // p = nullstr;
  system("pause");
  return 0;
}

这就是C++强制转换类型,最后一种用的较少,了解即可。


相关文章
|
安全 编译器 程序员
【C++】C++的类型转换
【C++】C++的类型转换
|
设计模式 安全 算法
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
356 0
|
存储 安全 编译器
C++:现代类型转换
C++:现代类型转换
103 5
|
10月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
262 5
|
11月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
99 2
|
11月前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
142 3
|
11月前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
222 3
|
11月前
|
C++
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
108 0
|
安全 程序员 C语言
从C语言到C++_37(特殊类设计和C++类型转换)单例模式(下)
从C语言到C++_37(特殊类设计和C++类型转换)单例模式
103 5
|
存储 安全 程序员
C++中的四种类型转换运算符
reinterpret_cast` 则是非常危险的类型转换,仅用于二进制级别的解释,不检查安全性。`dynamic_cast` 用于类的继承层次间转换,向上转型总是安全的,向下转型时会借助 RTTI 进行安全性检查。只有当转换路径在继承链内时,转换才会成功。