Załóżmy, że mam funkcja, która wykonuje jakiś efekt uboczny, a następnie zwraca odpowiedź:wskaźniki funkcyjne i typ zwracany konwersje
int foo()
{
perform_some_side_effect();
return 42;
}
chcę wiązać foo
do wskaźnika funkcji, ale nie jestem zainteresowany w odpowiedź, tylko efekt uboczny:
void (*bar)() = foo;
to jednak wydaje się być błąd typ:
error: invalid conversion from ‘int (*)()’ to ‘void (*)()’
Jakie są przesłanki tego błędu? Dlaczego system typów nie pozwala mi zignorować odpowiedzi?
Na marginesie, to działa, jeśli mogę zawinąć wskaźnik funkcji w std::function
:
std::function<void()> baz = foo;
Jak std::function
(podobno) udało się obejść to ograniczenie w systemie typu?
Racjonalne jest tak, że są różne rodzaje. Możesz to zmienić (na własne ryzyko) za pomocą 'reinterpret_cast'. –
@StevenBurnap: Pytanie brzmi: * dlaczego * nie można dokonać konwersji. Jest oczywiste, że są to różne typy. 'Float' również nie jest' int', ale możesz je konwertować. – Puppy
Domyślam się, że tak jest, ponieważ z zasady niejawne rzucanie wskaźników jest niedozwolone. –