c++11_explicit(显示转换操作符)

在c++中,有个特性,叫做隐式类型转换,在c语言中更多的是数据类型自下而上的一种隐式转换,而在c++中,更多的是指形参类型到该类类型 的一个隐式转换,这句话有些绕口,具体来看一个例子就能理解。

#include <iostream>

using namespace std;

class classA
{
  public:
  classA(int a=1,int b=1):m_a(a),m_b(b){}
  private:
    int m_a;
    int m_b;
};

class classB
{
  public:
  explicit classB(int a=1,int b=1):m_a(a),m_b(b){}
  private:
    int m_a;
    int m_b;
};

int main()
{
  classA a1 = 2;
  classA a2(5);

  classB b1 = 4;
  classA b2(5);

  return 0;
}

编译报错如下:
在这里插入图片描述
可以看出,普通构造函数可以被隐式构造,而被explicit修饰的构造函数不支持隐式构造。

发布了32 篇原创文章 · 获赞 23 · 访问量 873

猜你喜欢

转载自blog.csdn.net/weixin_40179091/article/details/105100485