В этом случае оператор присваивания не вызывается вообще. A a = b;
всегда вызывает конструктор. Если b
имеет объект типа A
, вызывается конструктор копирования. Если b
является объектом другого типа B
, то вызывается подходящий конструктор, например A( const B& )
. При любых обстоятельствах A a(b);
и A a = b;
приведут к абсолютно одинаковому коду с одним и тем же конструктором, вызванным один раз.
Следующее НЕ будет компилироваться, поскольку подходящего конструктора не существует, хотя для класса TB
есть подходящий оператор присваивания и конструктор по умолчанию:
#include <iostream>
class TA
{
public:
TA()
{
std::cout << "TA()" << std::endl;
}
TA( const TA& )
{
std::cout << "TA(const TA&)" << std::endl;
}
};
class TB
{
public:
TB()
{
std::cout << "TB()" << std::endl;
}
TB( const TB& )
{
std::cout << "TB(const TB&)" << std::endl;
}
TB& operator=( const TA& )
{
std::cout << "TB& operator=( const TA& )" << std::endl;
return ( *this );
}
};
int main( void )
{
TA la;
TB lb = la;
return ( 0 );
}
Так что ответ на ваш вопрос «Нет, это не быстрее, это на 100% то же самое» .