explicit 的作用(如何避免编译器进行隐式类型转换)
作用:用来声明类构造函数是显示调用的,而非隐式调用,可以阻止调用构造函数时进行隐式转换。只可用于修饰单参构造函数,因为无参构造函数和多参构造函数本身就是显示调用的,再加上 explicit 关键字也没有什么意义。
隐式转换:
#include <cstring> #include <iostream> using namespace std; class A { public: int var; A(int tmp) { var = tmp; } }; int main() { A ex = 10; // 发生了隐式转换 return 0; }
上述代码中,A ex = 10; 在编译时,进行了隐式转换,将 10 转换成 A 类型的对象,然后将该对象赋值给 ex,等同于如下操作:
为了避免隐式转换,可用 explicit 关键字进行声明:
#include <cstring> #include <iostream> using namespace std; class A { public: int var; explicit A(int tmp) { var = tmp; cout << var << endl; } }; int main() { A ex(100); A ex1 = 10; // error: conversion from 'int' to non-scalar type 'A' requested return 0; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: lambda 表达式(匿名函数)的具体应用和使用场景
下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论