C++的隐式或显式转换
2022/1/26 1:04:28
本文主要是介绍C++的隐式或显式转换,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
隐式转换
- 数字之间的隐式转换,要注意的是不能超出类型范围
include <iostream> int main() { int TypeInt = 3; short TypeShort = TypeInt; char TypeChar = TypeInt; double TypeDouble = TypeInt; float TypeFloat = TypeInt; std::cout << sizeof(TypeInt) << std::endl; std::cout << sizeof(TypeShort) << std::endl; std::cout << sizeof(TypeChar) << std::endl; std::cout << sizeof(TypeDouble) << std::endl; std::cout << sizeof(TypeFloat) << std::endl; std::cin.get(); }
- 参数传递,对象创建时也有隐式转换,但要注意隐式转换只能自动转换一次,所以字符串字面值(如“zimianzhi”)不能隐式转换成对象传给参数,因为字符串本质上是char Array,要先转换成字符串,再转成对象,转换了两次。
#include <iostream> #include <string> using String = std::string; class Entity { private: int Age; String Name; public: Entity(int age) : Age(age), Name("Unknown") {} Entity(String name) : Age(-1), Name(name) {} Entity(int age, String name) : Age(age), Name(name) {} }; void PrintEntity(const Entity& entity) { // } int main() { PrintEntity(22); //隐式转换 PrintEntity(std::string("hello,world")); std::cin.get(); }
限制为显式转换,explicit
不加限制时,可自由选择是隐式转换还是显式转换,但将类的构造器用explicit修饰后,隐式转换失效,只能显式转换。
class Entity { private: int Age; String Name; public: explicit Entity(int age) : Age(age), Name("Unknown") {} Entity(String name) : Age(-1), Name(name) {} Entity(int age, String name) : Age(age), Name(name) {} };
这篇关于C++的隐式或显式转换的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01UniApp 中组件的生命周期是多少-icode9专业技术文章分享
- 2024-11-01如何使用Svg Sprite Icon简化网页图标管理
- 2024-10-31Excel数据导出课程:新手从入门到精通的实用教程
- 2024-10-31Excel数据导入课程:新手入门指南
- 2024-10-31RBAC的权限课程:新手入门教程
- 2024-10-31Svg Sprite Icon课程:新手入门必备指南
- 2024-10-31怎么配置 L2TP 允许多用户连接-icode9专业技术文章分享
- 2024-10-31怎么在FreeBSD上 安装 OpenResty-icode9专业技术文章分享
- 2024-10-31运行 modprobe l2tp_ppp 时收到“module not found”消息提醒是什么-icode9专业技术文章分享
- 2024-10-31FreeBSD的下载命令有哪些-icode9专业技术文章分享