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;
}
コンパイラは次のエラーを報告します。
この暗黙の変換が無効になっていることがわかります