В чем разница между явным и неявным назначением в C ++

StackOverflow https://stackoverflow.com/questions/3057859

  •  27-09-2019
  •  | 
  •  

Вопрос

int value = 5; // this type of assignment is called an explicit assignment
int value(5); // this type of assignment is called an implicit assignment

В чем разница между теми, если таковые имеются, и в каких случаях отличается явное и неявное задание и как?


http://weblogs.ass.asp.net/kennykerr/archive/2004/08/31/Xplicit-constructors.aspx.

Редактировать: Я на самом деле только что нашел эту статью, что делает все это много яснее ... и это поднимает другой вопрос, если вы должны (В основном) Марка конструкторов, принимающих один параметр примитивного типа - числовой / лол / строка - как явное и остальное, поскольку они (конечно, сохраняют часы для GoTChas, такие как конструкторы, такие как (int, SomeType = SomeType())?

Это было полезно?

Решение

Они отличаются, если у класса есть конструктор, помеченный «явным». Тогда один из них не работает.

В противном случае нет разницы.

Другие советы

Ни одно из них не является назначением любого типа - они оба инициализации. Первый использует инициализацию копирования и вторую прямую инициализацию. (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(), Оставьте свой компилятор и получите тот, который работает (о, и дайте нам знать, какой компилятор это так плохо сломано)!

Только первый - это задание. Они оба инициализация.

Редактировать: на самом деле, я ошибаюсь. Ни одно назначение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top