【面经总结】C++小点随时记录
2021/9/13 22:05:40
本文主要是介绍【面经总结】C++小点随时记录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、隐式类型转换和显式类型转换
隐式类型转换由编译器自动进行,不需要程序员干预。隐式类型转换通常有两种情况:赋值转换和运算转换。
1)赋值转换:将一种类型的数据赋值给另外一种类型的变量时,发生隐式类型转换。比如:
int x = 1.23; // 1.23是double类型,先隐式转换为int float y = 66; // 66是int类型,先隐式转换为float
在对变量赋值时,若等号两边的数据类型不同,需要把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真(精度降低),所以隐式类型转换不一定是安全的。
2)运算转换:C语言中不同类型的数据需要转换成同一类型,才可以进行计算。
字符型、整型、浮点型之间的变量通过隐式类型转换,可以进行混合运算(不是所有数据类型之间都可以隐式转换),转换规则如下:
- 转换按数据长度增加的方向进行,以保证数据精度不降低。比如int类型和double类型相加时,int类型就会被隐式转换为double类型,然后再进行运算;
- 在条件判断中,非布尔类型自动转换为布尔类型。算术类型的值为0,则转换为false;否则转换为true;
- 类型转换不改变对象内存的值,当有符号类型转换为无符号类型时,其值可能发生变化。比如:
#include <iostream> using namespace std; int main() { int x = -1; unsigned int y = x; cout << "x: " << x << ", y: " << y << endl; return 0; }
运行结果为:
x: -1, y: 4294967295
显示类型转换:C语言显示类型转换也称为强制类型转换。
#include <iostream> using namespace std; int main() { double x = (int)1.5 * 2.5; cout << "x: " << x << endl; double y = (int)(1.5 * 2.5); cout << "y: " << y << endl; return 0; }
运行结果为:
x: 2.5 y: 3
2、explicit关键字
C++中的explicit关键字的作用就是防止类构造函数的隐式自动转换。具备以下任一条件,该 关键字生效
- 只有一个参数的类构造函数
- 除了第一个参数外其余参数都有默认值
C++中没有implicit关键字。
解决隐式类型转换的例子:
class Test1 { public: Test1(int n) { num=n; }//普通构造函数 private: int num; }; class Test2 { public: explicit Test2(int n) { num=n; }//explicit(显式)构造函数 private: int num; }; int main() { Test1 t1=12;//隐式调用其构造函数,成功 Test2 t2=12;//编译错误,不能隐式调用其构造函数 Test2 t2(12);//显式调用成功 return 0; }
这篇关于【面经总结】C++小点随时记录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01巧用 TiCDC Syncpoint 构建银行实时交易和准实时计算一体化架构
- 2024-05-01银行核心背后的落地工程体系丨Oracle - TiDB 数据迁移详解
- 2024-04-26高性能表格工具VTable总体构成-icode9专业技术文章分享
- 2024-04-16软路由代理问题, tg 无法代理问题-icode9专业技术文章分享
- 2024-04-16程序猿用什么锅-icode9专业技术文章分享
- 2024-04-16自建 NAS 的方案-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数, 加上remote_src: yes 配置-icode9专业技术文章分享
- 2024-04-14ansible 检测远程主机的8080端口,如果关闭,则echo 进程已关闭-icode9专业技术文章分享
- 2024-04-14result 成功怎么写-icode9专业技术文章分享