【009】探索C++中的转义字符和类型转换:发现编程的魔法

引言


💡 作者简介:专注分享高性能服务器后台开发技术知识,涵盖多个领域,包括C/C++、Linux、网络协议、设计模式、中间件、云原生、数据库、分布式架构等。目标是通过理论与代码实践的结合,让世界上看似难以掌握的技术变得易于理解与掌握。公众号《Lion 莱恩呀》。
👉
🎖️ CSDN实力新星、专家博主,阿里云博客专家、华为云云享专家
👉
🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
👉
🔔 专栏地址:C++从零开始到精通
👉
🔔 博客主页:https://blog.csdn.net/Long_xu


🔔 上一篇:【008】C++数据类型之重要关键字详解
🔔 下一篇:【010】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. 占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
  2. 转换方向:
    在这里插入图片描述

示例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++提供了以下四种显式类型转换:

  1. static_cast:用于基本数据类型之间的转换,如将int型转换为double型;
  2. dynamic_cast:用于类类型之间的转换,用于安全地进行向下转型(将基类指针或引用转换为派生类指针或引用);
  3. const_cast:用于删除const属性,如将const int型变量转换为int型变量;
  4. 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++类型转换是将一种数据类型的值转换为另一种数据类型的操作。

通过本文的阅读,读者可以全面了解C++中转义字符和类型转换的相关概念、原理和应用。从基础开始,逐步深入,介绍了转义字符的基本规则和常见用法,以及类型转换的自动和显式两种方式。随后,展示了转义字符和类型转换的实际应用场景,并结合示例代码进行了详细解释和演示。通过对新特性的介绍,读者可以了解到C++在类型转换方面的不断发展和完善,以及如何更好地利用这些特性来提高编程效率和代码质量。
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion Long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值