C++中 explicit的用法
2015-12-11 10:23
393 查看
explicit作用:
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
explicit使用注意事项:
*
explicit 关键字只能用于类内部的构造函数声明上。
*
explicit 关键字作用于单个参数的构造函数。
#include <iostream>
using namespace std;
class A
{
public:
explicit A(int a)
{
cout<<"创建类成功了!"<<endl;
}
};
int main()
{
A a=10;
return 0;
}
上面的代码编译不成功,原因是当显式地定义了一个带一个参数的构造函数( 带explicit),必须要显示地调用构造函数,
A a(10);
如果不加 explicit的话
A a=10;
实际的转换过程如下:
相当于直接调用A(10);
(1)
explicit
此关键字只能对用户自己定义的对象起作用,不对默认构造函数起作用
此关键字只能够修饰构造函数。而且构造函数的参数只能有一个。。
(2)何时用explicit
当我们不希望自动类型转换的时候用,其实标准库好多构造函数都是explicit的
比如说vector <int> ivec(10); //这种定义看起来一目了然
不能写成vector <int> ivec=10;//此种定义让程序员感到疑惑
(3)何时不用explicit
当我们需要隐式转换的时候
比如说String类的一个构造函数
String(const char*);
定义成这样的好处,在需要隐式转化的时候编译器会自动地帮我们转换,标准库里面的String就是一个好的证明。
具体来说:
我们可以这样String str="helloworld";//直接调用构造函数
String str="hello"+str+"world";
调用重载的+操作符号,此过程相当于:
String temp("hello"); //调用构造函数
String str=temp+str;
String t("world");//调用构造函数
String str=str+t;
明白隐式转换在我们自己写类的时候,尤其是些操纵内存的类的时候很有用。
* 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
explicit使用注意事项:
*
explicit 关键字只能用于类内部的构造函数声明上。
*
explicit 关键字作用于单个参数的构造函数。
#include <iostream>
using namespace std;
class A
{
public:
explicit A(int a)
{
cout<<"创建类成功了!"<<endl;
}
};
int main()
{
A a=10;
return 0;
}
上面的代码编译不成功,原因是当显式地定义了一个带一个参数的构造函数( 带explicit),必须要显示地调用构造函数,
A a(10);
如果不加 explicit的话
A a=10;
实际的转换过程如下:
相当于直接调用A(10);
(1)
explicit
此关键字只能对用户自己定义的对象起作用,不对默认构造函数起作用
此关键字只能够修饰构造函数。而且构造函数的参数只能有一个。。
(2)何时用explicit
当我们不希望自动类型转换的时候用,其实标准库好多构造函数都是explicit的
比如说vector <int> ivec(10); //这种定义看起来一目了然
不能写成vector <int> ivec=10;//此种定义让程序员感到疑惑
(3)何时不用explicit
当我们需要隐式转换的时候
比如说String类的一个构造函数
String(const char*);
定义成这样的好处,在需要隐式转化的时候编译器会自动地帮我们转换,标准库里面的String就是一个好的证明。
具体来说:
我们可以这样String str="helloworld";//直接调用构造函数
String str="hello"+str+"world";
调用重载的+操作符号,此过程相当于:
String temp("hello"); //调用构造函数
String str=temp+str;
String t("world");//调用构造函数
String str=str+t;
明白隐式转换在我们自己写类的时候,尤其是些操纵内存的类的时候很有用。
* 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换
相关文章推荐
- C++类构造函数初始化列表
- C++运算符重载
- HDU 1176 非倒序 动态规划写法 望指教
- C指针声明解读之左右法则
- 【转】C#与C/C++的交互
- C++句柄类详解
- 学生管理系统----用c语言在Xcode里编写 学生管理系统
- C++编码规范
- 第11周项目2 用二叉树求解代数表达式
- C++面试2(简答题)
- c语言排序,冒泡排序
- C语言开发简易版扫雷小游戏
- C++ 类包含关系Demo 笔记
- C++专题(三)
- C++专题(二)
- 算法竞赛入门经典数学篇实用小结(一)
- C++中的引用
- C++基础知识: 公有继承,保护继承,私有继承的总结,私有继承的用意何在
- PAT乙级——1010 月饼 (C/C++)
- PAT乙级——1009 数字黑洞 (C/C++)