Есть некий класс:
class ExplicitTest
{
int m_a;
public:
explicit ExplicitTest( int a ) :
m_a( a ) {}
ExplicitTest( const ExplicitTest &obj ) :
m_a( obj.m_a ) {}
virtual ~ExplicitTest() {}
};
Как сделать, чтобы явной считалась и инициализация с помощью знака равно(=)?
Примерно так:
ExplicitTest TestObj1(0); // OK
ExplicitTest TestObj1 = ExplicitTest(0); // OK
ExplicitTest *pTestObj = new ExplicitTest(0); // OK
ExplicitTest TestObj2 = 0; // Want to be OK
void Function( const ExplicitTest &obj);
Function( 0 ); // Error
Я конечно понимаю, что там создается временный объект, но компилятор ведь все равно это оптимизирует ) Вообщем хочется запретить создавать неявно временные объекты и разрешить все остальное.