В чем разница между двумя вызовами конструктора копирования в C ++? - PullRequest
0 голосов
/ 28 июня 2018

Посмотрите на следующие коды:

class Foo    
{ 
public:  
    Foo(){}  
    explicit Foo(const Foo &){}  
};  
int main()  
{  
    Foo foo1;  
    Foo foo2(foo1);  
    Foo foo3 = foo1; //can not compile    
    return 0;  
}  

Почему Foo foo3 = foo1; не может скомпилироваться, и в чем разница между двумя вызовами конструктора копирования?
PS: мои инструменты компилятора GCC4.8.2

1 Ответ

0 голосов
/ 28 июня 2018

Foo foo2(foo1); - это прямая инициализация . Foo foo3 = foo1; is копировать инициализацию . Разница между ними составляет

Копирование-инициализация менее разрешительна, чем прямая инициализация: явные конструкторы не являются конвертирующими конструкторами и не рассматриваются для копирования-инициализации.

Конструктор копирования Foo объявлен как explicit, что не учитывается при инициализации копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...