C++数据类型之转义字符和类型转换
- 引言
- 一、转义字符
- 1.1、概念
- 1.2、八进制转义
- 1.3、十六进制转义
- 二、类型转换
- 2.1、自动类型转换原则
- 2.2、强制类型转换
- 三、C++新特性中类型转换的扩展
- 3.1、隐式类型转换
- 3.2、显式类型转换
- 总结
引言
💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。
👉
🎖️ CSDN实力新星,社区专家博主
👉
🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
👉
🔔 专栏地址:C++从零开始到精通
👉
🔔 博客主页:https://blog.csdn.net/Long_xu
🔔 上一篇:【008】C++数据类型之重要关键字详解
一、转义字符
1.1、概念
\和某些字符结合产生新的字符含义就是转义字符。
转义字符是以反斜杠(\)开始的特殊字符,它们被用于表示一些不可打印的字符、控制符号或者特殊的字符序列。在C++中,常见的转义字符包括:
- \n:换行符
- \r:回车符
- \t:制表符
- \b:退格符
- \f:换页符
- \ \:反斜杠本身
- \ ':单引号
- \ ":双引号
例如,下面的代码使用了一些转义字符:
#include <iostream>
using namespace std;
int main() {
cout << "Hello\tworld!\n";
cout << "What\'s up?\n";
cout << "This is a backslash: \\ \n";
return 0;
}
输出结果:
Hello world!
What's up?
This is a backslash: \
1.2、八进制转义
格式:
'\ddd'
每个d的范围必须是0~7,3个d表示最多识别3位八进制数据。例如:
'\123'; // 符合八进制转义
'\18'; // 超出了7,是两个字符
'\1234'; // 超出了三位,是两个字符
'\183'; // 超出了7,是三个字符
1.3、十六进制转义
格式:
'\xhh'
每个h的范围是0~9、A ~ F,2个h表示最多识别2位十六进制,x符号是必须包含的。
'\af';// 错误,没有x
'\123';// 正确,是八进制转义
'\x3df';// 错误,超过两位
'\xab'; // 正确
二、类型转换
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。
转换的方法有两种:
- 自动转换:遵循一定的规则,由编译系统自动完成。
- 强制类型转换:把表达式的运算结果强制换成所需的数据类型。
2.1、自动类型转换原则
- 占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
- 转换方向:
示例1:无符号和有符号参加运算,需要将有符号转换成无符号。
int data=-10;
unsigned int data2=6;
if(data+data2>0)
{
cout<<"大于0"<<endl;
}
else
{
cout<<"小于0"<<endl;
}
// 输出 大于0
示例2:int和double参加运算,会将int转换成double类型。
int data=0;
double data2=0.0;
cout<<sizeof(data+data2)<<endl; // 输出8
示例3:char和short类型只要参加运算就会将自己转换成int类型。
char ch='a';
short sh=0;
cout<<sizeof(ch+ch)<<endl;// 输出4
cout<<sizeof(sh+sh)<<endl;// 输出4
cout<<sizeof(ch+sh)<<endl;// 输出4
自动类型转换是为了保证精度不丢失。
2.2、强制类型转换
格式:
(类型说明符) (表达式)
功能:把表达式的运算结果强制转换成类型说明符所表示的类型。
强制类型转换能让程序通过编译和运行,对于运行结果(精度方面)不保证。
例子:
float p=0.0f;
(int)p+1; // p强制转换为int类型,然后+1
(int)(p+1); // p+1强制转换为int
注意:不管是自动类型转换还是强制类型转换,都是临时的,不会更改原始变量的类型。
三、C++新特性中类型转换的扩展
C++中的类型转换可分为隐式类型转换和显式类型转换两种。
3.1、隐式类型转换
隐式类型转换是指编译器自动将一个数据类型转换为另一个数据类型,而无需编写额外的代码。例如,当不同类型的数据进行运算时,编译器会自动将其中一个数据类型转换为和另一个数据类型相同的类型,然后再进行运算。又如,当将一个较小的整数赋值给一个较大的整数变量时,编译器也会自动进行类型转换。
3.2、显式类型转换
显式类型转换是指程序员在代码中显式地指定将一个数据类型转换为另一个数据类型。C++提供了以下四种显式类型转换:
- static_cast:用于基本数据类型之间的转换,如将int型转换为double型;
- dynamic_cast:用于类类型之间的转换,用于安全地进行向下转型(将基类指针或引用转换为派生类指针或引用);
- const_cast:用于删除const属性,如将const int型变量转换为int型变量;
- reinterpret_cast:用于不同类型的指针之间的转换,如将int型指针转换为char型指针。
例如,下面的代码演示了使用static_cast将int型变量转换为double型变量:
#include <iostream>
using namespace std;
int main()
{
int a = 10;
double b = static_cast<double>(a); // 将int型变量a转换为double型变量b
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
输出结果为:
a = 10
b = 10
总结
C++类型转换是将一种数据类型的值转换为另一种数据类型的操作。