C++11 の明示的なキーワード

C++ は明示的に組み込み型の暗黙的な変換を防ぐことができます

明示的が使用されていない場合:

一般クラスの構築中:

#include<iostream>

using namespace std;

class A
{
public:
	A(int num):x(num){}
	int x;
};

int main()
{
	A a(1);
	cout<<a.x<<endl;
}

次のように書くこともできます。

#include<iostream>

using namespace std;

class A
{
public:
	A(int num):x(num){}
	int x;
};

int main()
{
	A a = 1;
	cout<<a.x<<endl;
}

int から A への暗黙的な変換は、このプロセスで行われます

 これにより、特定のセキュリティリスクが発生します 

明示的なキーワードを使用した後

明示的な使用後、通常の構築プロセスを完了できます。

#include<iostream>

using namespace std;

class A
{
public:
	explicit A(int num) :x(num) {}
	int x;
};

int main()
{
	A a(1);
	cout << a.x << endl;
}

でコンパイルできます

#include<iostream>

using namespace std;

class A
{
public:
	explicit A(int num) :x(num) {}
	int x;
};

int main()
{
	A a = 1;
	cout << a.x << endl;
}

コンパイラは次のエラーを報告します。

 この暗黙の変換が無効になっていることがわかります

おすすめ

転載: blog.csdn.net/qq_36653924/article/details/129474901