博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ explicit小节
阅读量:4106 次
发布时间:2019-05-25

本文共 724 字,大约阅读时间需要 2 分钟。

在C++中,可以通过将构造函数声明为explicit来防止在需要隐式转换的Context中使用构造函数。

class B

{
private:
int data;
public:
 explicit B() //去掉explicit程序才能正常运行
{
cout << "default constructor" << endl;
}
~B()
{
cout << "destructed " << endl;
}
  B(int i) : data(i) //带参构造函数 :后面试成员变量初始化列表
{
cout <<"Constructed by parameter " << data << endl;
}
};
B Play(B b)
{
return b;
}
int main(int argc, char* argv[])
{
 B temp = Play(5);  //通过隐含的类型转换调用了B::B(int i)
return 0;
}

 

   

explicit关键字只能用于类内部的构造函数声明上。在类的定义体外部所做的定义上不能再重复它

class one

{

      ...

    explicit one(int i);

     ...

 

}; 

   explicit one:: one(int i) //error: 不能在类的体外部重复explicit

 

  {

      ... 

   } 

 

 

 如果一个类或结构存在多个构造函数时,explicit 修饰的那个构造函数就是默认的

当构造函数被声明为explicit时,编译器将不使用它作为转换操作符 

 explicit 关键字作用于单个参数的构造函数

通常,除非有明显的理由想要定义隐式转换,否则,单形参构造函数应该为explicit。 

 

转载地址:http://esjsi.baihongyu.com/

你可能感兴趣的文章
用WinRAR解压7z.001格式的文件
查看>>
如何UIButton添加事件并传递参数
查看>>
关于Ubuntu下apt的一些用法及和yum的比较
查看>>
自定义UITableView的Header
查看>>
Nmap扫描原理与用法
查看>>
Ubuntu下利用系统创建xorg.conf文件
查看>>
ubuntu修改默认启动级别
查看>>
Vmware中装Linux Mint 15 添加 1600x900分辨率
查看>>
如何为Gnome3添加自启动程序
查看>>
Fedora 19 Mate环境安装Gnome3
查看>>
Fedora19启动时“出现无法应用原保存的显示器配置”解决办法
查看>>
景程手动空调面板故障,指示灯失灵修理记录
查看>>
Nginx通过CORS实现跨域
查看>>
Qt5.1.0 MSVC2012(32bit) release静态版编译结果分享
查看>>
Windows7下MySQL5.5.20免安装版的配置
查看>>
打造轻量化的View Controller
查看>>
Xcode中断点的威力
查看>>
初识block
查看>>
深度围观block:第一集&第二集
查看>>
深度围观block:第三集
查看>>