C++のキーワードexplicit
2644 ワード
C++ explicit , , 。 C++ , C++ 。 MFC C++ explicit 。 explicit , 。 C++ , 。
, 。 :
( CExample , )
//Example.h
#pragma once class CExample
{
public:
CExample(void);
public:
~CExample(void);
public:
int m_iFirst;
int m_iSecond;
public:
CExample(int iFirst, int iSecond = 4);
};
//Example.cpp
#include "StdAfx.h"
#include "Example.h"
CExample::CExample(void)
: m_iFirst(0)
{
}
CExample::~CExample(void)
{
}
CExample::CExample(int iFirst, int iSecond):m_iFirst(iFirst), m_iSecond(iSecond)
{
}
//TestExplicitKey.cpp
...//
#include "Example.h"
int _tmain(int argc, _TCHAR* argv[])
{
CExample objOne; //
CExample objTwo(12, 12); //
CExample objThree(12); // ,
CExample objFour = 12; // , CExample temp(12);objFour(temp);
//
return 0;
}
explicit,
explicit CExample(int iFirst, int iSecond = 4);
CExample objFour = 12; 。 vs05
error C2440: 'initializing' : cannot convert from 'int' to 'CExample'
Constructor for class 'CExample' is declared 'explicit'
, 。 , ( , )。 , , 。 explicit( ) 。 ,explicit 。
Bjarne Stroustrup :
class String{
explicit String(int n);
String(const char *p);
};
String s1 = 'a'; // : char->String
String s2(10); // : explicit String(int n);
String s3 = String(10);// : explicit String(int n);
String s4 = "Brian"; // : String(const char *p);
String s5("Fawlty"); // : String(const char *p);
void f(String);
String g()
{
f(10); // : int->String
f("Arthur"); // : , f(String("Arthur"));
return 10; //
}
。
, , , 。
explicit , explicit, 。