我是靠谱客的博主 狂野花卷,最近开发中收集的这篇文章主要介绍C++ Explicit Constructors(显式构造函数),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

http://www.cnblogs.com/xudong-bupt/p/3671972.html


C++ 为类(Class)提供了许多默认函数。如果自己没有申明,编译器会为我们提供一个copy构造函数、一个copy assignment操作符一个析构函数。此外,如果没有申明任何构造函数,编译器会为我们申明一个default构造函数。很像下面的Empty类:

复制代码
1 class Empty{
2     public:
3         Empty();
4         Empty(const Empty &rhs);
5         ~Empty();
6         Empty& operator=(const Empty &rhs);
7 };
复制代码

   就像Effective C++说的,如果不想使用编译器自动生成的函数,就应该明确拒绝。

1.C++中的隐式构造函数

  如果c++类的其中一个构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。

2.Explicit Constructors显式构造函数

  为了避免上面提到的只有一个参数的构造函数采用的缺省转换操作,在构造函数前,使用Explicit 关键字修饰即可。

3.如下面的例子:

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 class B{
 4     public:
 5         int data;
 6         B(int _data):data(_data){}
 7         //explicit B(int _data):data(_data){}
 8 };
 9 
10 int main(){
11     B temp=5;
12     cout<<temp.data<<endl;
13     return 0;
14 }
复制代码

  程序第11行,将int转换为B类型的对象,就是使用了隐式构造函数。因为B中存在一个只有一个参数的构造函数,且参数类型也是int。

  如果在构造函数前加explicit ,表示为显示构造函数,则第11行编译不能通过。因为这时,就没有隐式构造函数啦。


最后

以上就是狂野花卷为你收集整理的C++ Explicit Constructors(显式构造函数)的全部内容,希望文章能够帮你解决C++ Explicit Constructors(显式构造函数)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部