explicit i operator przypisania

explicit i operator przypisania
NW
  • Rejestracja: dni
  • Ostatnio: dni
0

Cześć,

mam pewne pytanie dotyczące słówka explicit i tworzenia obiektu z operatorem "=". Otóż jak wiemy słówko explicit uniemożliwia stworzenie konstruktora konwertującego (w sensie, że konstruktor konwertujący staje się "normalnym" konstruktorem). Jednak gdy na naszym konstruktorze użyjemy tego słowa kluczowego explicit, to wtedy nie można stworzyć obiektu w ten sposób:

Kopiuj
class aaa {
public:
  explicit aaa( const char[] x ) { // blabla }
};

// ...

aaa o = "tekst"; // blad! mozna jedynie aaa o( "tekst" );

dlaczego? Jaki jest sens w blokowaniu tworzenia obiektów za pomocą pierwszego sposobu (z operatorem przypisania)?

Pozdrawiam i dziękuję za pomoc.

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

By nie powstawała niejawna konwersja z typu argumentu na klasę, często jest to potrzebne ze względów bezpieczeństwa jak np. przy auto_ptr.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

aa o = "tekst"; // blad! mozna jedynie aaa o( "tekst" );

no bo próbujesz właśnie dokonać konwersji z const char * na aaa.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

@nwnuinr

  1. Pierwszy błąd: operator przypisania to nie to samo co konstruktor kopiujący! Pierwszy startuje jeśli masz obiekt i coś do niego przypisujesz
Kopiuj
Klasa obiekt;
obiekt = cośtam;

Drugi startuje tylko w chwili tworzenia obiektu

Kopiuj
Klasa obiekt = cośtam;
  1. Explicit uniemożliwia ci niejawną konwersję typu tym konstruktorem. Czasem tak bywa że ci ta konwersja przeszkadza np. wprowadzając niejednoznaczności (sprawdź jaki jest algorytm dopasowywania wywołania funkcji do jej definicji)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.