varsayalım Sonra bazı yan etkisi yapar ve bir fonksiyon bir cevap verir vardır: Ben bir işlev işaretçisi foo
bağlamak istiyorumfonksiyon işaretçileri ve döndürme türü dönüşümleri
int foo()
{
perform_some_side_effect();
return 42;
}
ama ilgilenmiyorum cevap, sadece yan etki:
error: invalid conversion from ‘int (*)()’ to ‘void (*)()’
:
void (*bar)() = foo;
Ancak bu bir tür hata gibi görünen
Bu hatanın ardındaki mantık nedir? Tip sistemi neden cevabı göz ardı etmeme izin vermiyor? Ben de işlev işaretçisi sarın eğer Yan not
, çalışıyor bir std::function
:
std::function<void()> baz = foo;
Nasıl std::function
(görünüşte) tipi sisteminde bu kısıtlamayı aşmak için yönetir?
rasyonel farklı tipleri vardır sadece budur çalışması için bazı hile sürer. Bunu (rızanızla) 'reinterpret_cast' ile geçersiz kılabilirsiniz. –
@StevenBurnap: Soru * neden * dönüşemiyoruz. Farklı türler oldukları açıktır. Bir float, 'int' değildir, ancak bunları dönüştürebilirsiniz. – Puppy
Bunun sebebi, genel bir kural olarak, dolaylı olarak casting işaretçilerine izin verilmemesidir. –