Silakan pertimbangkan kode berikut:

int f(int i){return i*i;};

int main() {

    void* p = static_cast<void*>(&f);

    return 0;
}

Seperti yang Anda bisa lihat di sini kode tidak dikompilasi. Mengapa static_cast dari int (*)(int) ke void* tidak diizinkan di C++?

2
BlueTune 13 Maret 2020, 00:49

1 menjawab

Jawaban Terbaik

Anda tidak dapat memberikan penunjuk fungsi ke void* dengan static_cast, tetapi Anda mungkin dapat melakukannya dengan reinterpret_cast.

Ini didukung secara kondisional dengan semantik didefinisikan implementasi, kecuali bahwa casting kembali ke tipe pointer fungsi asli menghasilkan nilai pointer yang sama, sehingga dapat digunakan lagi untuk memanggil fungsi.

Mungkin Anda tidak diperbolehkan melakukan hal lain dengan void* yang diperoleh sedemikian rupa, tetapi Anda perlu melihat dokumentasi kompiler untuk menentukannya. (Compiler harus mendokumentasikan perilaku yang ditentukan implementasi, tetapi sering kali tidak dilakukan dengan baik atau tidak sama sekali.)

Khususnya pada sistem POSIX dan Windows, cast ini selalu didukung.

5
walnut 12 Maret 2020, 22:14