c++中explicit关键字
2016-05-03 17:40
316 查看
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的。既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:
在上面的代码中编译器自动将整型转换为A类对象,实际上等同于下面的操作:
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:
#include <iostream> using namespace std; class A { public: A( int num ):num_(num) { cout<<"constructor is called."<<endl; } private: int num_; }; int main() { A a = 1; return 0; }
在上面的代码中编译器自动将整型转换为A类对象,实际上等同于下面的操作:
A a = A(10);C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。
#include <iostream> using namespace std; class A { public: explicit A( int num ):num_(num) { cout<<"constructor is called."<<endl; } private: int num_; }; int main() { A a1 = 1;//编译通不过 A a2(10);//编译通过 return 0; }
相关文章推荐
- C++面向对象编程分享10----观察者模式
- C++中explict关键字用法
- c++第四次上机实验
- C语言递归——猴子摘桃
- C++基础实例-函数等(4)
- C++基础知识——指向指针的指针
- [C++Primer]序&前言
- MFC C++ Format 16进制输出时需要注意的一点
- java c++ 程序员 技术面试常用问题
- C++基础知识——引用
- 第八周期末考试
- C++智能指针及其简单实现
- C++ typedef用法小结
- leetcode 169---Majority Element
- VC++6.0在win8.1系统下的兼容性破解
- C语言文件读写操作中缓冲区问题和setbuf函数详解
- 猜数字(C语言版)
- C++学习笔记之八 复合类型---指针、数组和指针运算
- 【C/C++】自增运算符++详解
- C语言小结