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


相关文章
|
4月前
|
安全 编译器 程序员
【C++】C++的类型转换
【C++】C++的类型转换
|
4月前
|
安全 编译器 程序员
特殊类设计以及C++中的类型转换
特殊类设计以及C++中的类型转换
49 2
|
4月前
|
设计模式 安全 算法
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
164 0
|
4月前
|
安全 编译器 C++
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
48 0
|
4月前
|
存储 安全 编译器
C++:现代类型转换
C++:现代类型转换
42 5
|
2月前
|
存储 安全 编译器
【C++11】类型转换
【C++11】类型转换
12 0
|
2月前
|
安全 程序员 编译器
C++一分钟之-C++中的类型转换
【7月更文挑战第8天】C++中的类型转换涉及隐式和显式操作,隐式转换如从`int`到`double`是自动的,但可能导致数据丢失。显式转换包括`static_cast`, `dynamic_cast`, `const_cast`, `reinterpret_cast`,以及转换构造函数。要避免数据丢失、类型不匹配和运行时错误,需谨慎使用显式转换并检查结果。过度使用`reinterpret_cast`应避免。理解这些转换有助于编写更安全的代码。
22 0
|
3月前
|
存储 编译器 C++
【C++】类和对象④(再谈构造函数:初始化列表,隐式类型转换,缺省值
C++中的隐式类型转换在变量赋值和函数调用中常见,如`double`转`int`。取引用时,须用`const`以防修改临时变量,如`const int& b = a;`。类可以有隐式单参构造,使`A aa2 = 1;`合法,但`explicit`关键字可阻止这种转换。C++11起,成员变量可设默认值,如`int _b1 = 1;`。博客探讨构造函数、初始化列表及编译器优化,关注更多C++特性。
|
4月前
|
安全 程序员 C语言
从C语言到C++_37(特殊类设计和C++类型转换)单例模式(下)
从C语言到C++_37(特殊类设计和C++类型转换)单例模式
39 5
|
3月前
|
安全 编译器 程序员
【C++航海王:追寻罗杰的编程之路】C++的类型转换
【C++航海王:追寻罗杰的编程之路】C++的类型转换
31 0