Skip to content

Instantly share code, notes, and snippets.

@qiaohaijun
Last active June 12, 2017 11:44
Show Gist options
  • Select an option

  • Save qiaohaijun/4827b023757050f1d9eb6ac649b355f5 to your computer and use it in GitHub Desktop.

Select an option

Save qiaohaijun/4827b023757050f1d9eb6ac649b355f5 to your computer and use it in GitHub Desktop.

explicit 的反义词是 implicit

  1. explicit是显式的意思
  2. implicit是隐式的意思

编译器隐式转换出现的条件

  1. 没有使用explicit 标注
  2. 有一个参数的类初始化

使用这个关键字

  1. 使用在构造函数,如果在构造函数上用了这个关键字,那么这个构造函数就是显式的

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

class MyClass {
	public:
	MyClass(int num){};
};

int main() {
	MyClass obj = 10;	
}

上面的代码是可以编译通过的,这个隐式转化的过程可以用下面的代码来演示:

MyClass temp(10);  
MyClass obj = temp; 
  1. 首先是生成一个临时的类
  2. 然后把临时的类赋给obj

加上 explicit之后,就是告诉编译器,不要替我做隐式转换了。

class MyClass {
	public:
	explicit MyClass(int num){};
};

int main() {
	MyClass obj = 10;	
}
[@djt_27_47 ~]$ g++ t_explicit.cc 
t_explicit.cc: In function 'int main()':
t_explicit.cc:7: error: conversion from 'int' to non-scalar type 'MyClass' requested

输出的错误。


ref

  1. http://qimo601.iteye.com/blog/1430172
@qiaohaijun

Copy link
Copy Markdown
Author

这个c++无中生有的绝技

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment