Przekazywanie int jako argumentu bool w C++

Minute
2 min readSep 24, 2022

--

W tej deklaracji

toto t = new toto(0);

obiekt t typu klasy toto jest inicjowany przez wskaźnik zwracany przez wyrażenie new toto(0) . Ponieważ zwrócony wskaźnik nie jest równy nullptr następnie jest niejawnie konwertowane na wartość logiczną true.

Więc w rzeczywistości masz

toto t = true;

z wyjątkiem przecieku pamięci, ponieważ adres przydzielonego obiektu został utracony. Dlatego przydzielony obiekt nie może zostać usunięty.

Możesz sobie wyobrazić powyższą deklarację w następujący sposób.

toto *ptr = new toto(0)
toto t = ptr;

Więc pierwszy wiersz tego wyjścia

constructor bool:false
constructor bool:true

odpowiada dynamicznie tworzonemu obiektowi z argumentem 0

new toto(0)

Następnie zwrócony wskaźnik jest używany jako inicjator i jest niejawnie konwertowany na wartość logiczną true który jest używany do inicjalizacji zadeklarowanego obiektu t . Zatem druga linia pokazuje wywołanie konstruktora konwersji (konstruktora z parametrem) z wartością true.

Nie ma wielkiej różnicy między powyższą deklaracją a tą instrukcją przypisania

t = new toto(false);

ponieważ ponownie wskaźnik jest używany po prawej stronie zadania.

Tak więc niejawnie zdefiniowany operator przypisania kopii konwertuje wartość wskaźnika, która nie jest równa nullptr do wartości logicznej true .

To zadanie możesz sobie wyobrazić w następujący sposób

  1. Co to znaczy, że lambda jest statyczna?
  2. Czytaj liczby wejściowe oddzielone spacjami
  3. Jak wykonać operację bitową na liczbach zmiennoprzecinkowych
  4. Dziedziczenie prywatne powoduje problem w c++
  5. GMock — zwracanie wartości domyślnej z ON_CA

--

--