C++ 語法實驗室之explicit關鍵字

好久沒寫過博客了,走一篇基礎語法吧,算是湊個數吧


C++的explicit關鍵字的唯一作用就是放在一個類的構造函數前面修飾他,使此個構造函數無法通過賦值方式的隱式轉換來調用。

以上這句話是我概括的,那麼具體案例如下


// testcpplus.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string>

class MyClass
{

public:

	explicit MyClass(int _age)
	{
		age = _age;
	}

	MyClass(const char  *_name)
	{
		strcpy(name, _name);
	}

	~MyClass()
	{


	}

public:
	int age;
	char name[200];
};


int main(int argc, char* argv[])
{
	MyClass myclassint1(5);//可以編譯OK

	MyClass myclassint2 = 5;//無法隱式調用構造函數

	MyClass myclassfloat = "123456";//可以編譯OK。隱式調用了構造函數

	myclassfloat = "789654";//可以編譯OK。

	printf("測試完畢\r\n");
	system("pause");
	return 0;

}


可以很明確的發現一旦使用了explicit關鍵字的構造函數,則無法使用隱式方式=這種進行構造,當然如果你執着於要用等於號,還可以重載一下等於號這個運算符

總結:此關鍵字最大作用就是防止在有很多單參數構造函數等於號極度容易衝突情況,可以加上此關鍵字,保證正取的調用構造函數。

注意:實際我個人推薦要儘量可能避免一切隱式轉換的發生,不管它能不能隱式轉換。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章