Ни одно из них не является назначением любого рода - они оба инициализируются. Первый использует инициализацию копирования, а второй - прямую инициализацию. (FWIW, я почти уверен, что никогда раньше не слышал терминов «явное назначение» или «неявное назначение»).
Редактировать: (В основном в ответ на комментарий Натана):
Вот исправленная версия кода из вашего комментария:
#include <iostream>
struct Foo {
Foo() {
std::cout << "Foo::ctor()" << std::endl;
}
Foo(Foo const& copy) {
std::cout << "Foo::cctor()" << std::endl;
}
Foo& operator=(Foo const& copy) {
std::cout << "foo::assign()" << std::endl;
return *this;
}
};
int main(int, const char**) {
Foo f;
Foo b(f);
Foo x = b;
return 0;
}
Результат выполнения этого должен быть:
Foo::ctor()
Foo::cctor()
Foo::cctor()
Если вы запустите его и получите foo::assign()
, выбросьте свой компилятор и получите тот, который работает (о, и дайте нам знать, что это за компилятор, который так сильно сломан)!