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++强制转换类型,最后一种用的较少,了解即可。


相关文章
|
7月前
|
安全 编译器 程序员
【C++】C++的类型转换
【C++】C++的类型转换
|
7月前
|
设计模式 安全 算法
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
224 0
|
26天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
70 5
|
2月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
24 1
|
2月前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
37 3
|
2月前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
49 3
|
7月前
|
存储 安全 编译器
C++:现代类型转换
C++:现代类型转换
54 5
|
2月前
|
C++
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
26 0
|
5月前
|
存储 安全 编译器
【C++11】类型转换
【C++11】类型转换
34 0
|
5月前
|
安全 程序员 编译器
C++一分钟之-C++中的类型转换
【7月更文挑战第8天】C++中的类型转换涉及隐式和显式操作,隐式转换如从`int`到`double`是自动的,但可能导致数据丢失。显式转换包括`static_cast`, `dynamic_cast`, `const_cast`, `reinterpret_cast`,以及转换构造函数。要避免数据丢失、类型不匹配和运行时错误,需谨慎使用显式转换并检查结果。过度使用`reinterpret_cast`应避免。理解这些转换有助于编写更安全的代码。
47 0