当前位置: 首页 > news >正文

C++隐式调用和explicit关键字

隐式类型转换

#include <iostream>
using namespace std;class Point {
public:int x, y;Point(int x = 0, int y = 0): x(x), y(y) {}
};void displayPoint(const Point& p) 
{cout << "(" << p.x << "," << p.y << ")" << endl;
}int main()
{displayPoint(1);Point p = 1;
}

它的构造函数使用了默认参数. 这时主函数里的两句话都会触发该构造函数的隐式调用. (如果构造函数不使用默认参数, 会在编译时报错)
函数displayPoint需要的是Point类型的参数, 而我们传入的是一个int, 这个程序却能成功运行, 就是因为这隐式调用.
程序的输出结果为(1,0)
此外,在对象刚刚定义时, 即使你使用的是赋值操作符=, 也是会调用构造函数, 而不是重载的operator=运算符.

explicit关键字

上述发生的事情,有时可以带来好处,但有时也会带来意想不到的后果;explicit是防止类构造函数的隐式自动转换

#include <iostream>
using namespace std;class Point {
public:int x, y;explicit Point(int x = 0, int y = 0): x(x), y(y) {}
};void displayPoint(const Point& p) 
{cout << "(" << p.x << "," << p.y << ")" << endl;
}int main()
{displayPoint(Point(1));Point p(1);
}
http://www.lryc.cn/news/121908.html

相关文章:

  • Git 清除所有本地修改
  • 快速获得图像中像素值的小工具
  • yolo数据增强
  • 环保行业如何开发废品回收微信小程序
  • 个人对哈希数据结构学习总结 -- 理论篇
  • 在CMamke生成的VS项目中插入程序
  • 198、仿真-基于51单片机函数波形发生器调幅度频率波形Proteus仿真(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)
  • Django 初级指南:创建你的第一个 Django 项目
  • 【MySQL】使用C++连接数据库
  • php代码审计,php漏洞详解
  • uniapp 将标题背景更换背景图片 完美解决(附加源码+实现效果图)
  • 必备工具:Postman Newman 详解
  • OpenCV基本操作——算数操作
  • css实现文字首行缩进的效果
  • Eclipse-配置彩色输出打印
  • easyx图形库基础:1.基本概念的介绍+图形的绘制。
  • zerotier requesting configuration
  • 接口mock常用工具
  • 13-把矩阵看作是对系统的描述
  • Linux系统下安装Git软件
  • SpringBoot框架
  • Chrome有些网站打不开,但是火狐可以打开
  • Linux网络基础(中)
  • 【C++起飞之路】初级—— auto、范围for循环、宏函数和内联函数
  • 开发工具Eclipse的使用之导入项目(import)
  • decimal类型在MySQL中的正确使用 (长度和小数点)
  • Mongodb 安装
  • Java技术整理(5)—— Spring篇
  • 07-MySQL-基础篇-函数
  • 不同路径 II——力扣63