Saya tidak tahu ini:
int main() {
int (*) (int *) = 5;
return 0;
}
Tugas di atas dikompilasi dengan g ++ c ++ 11. Saya tahu itu int (*) (int *)
adalah penunjuk ke fungsi yang menerima (int *)
argumen sebagai dan mengembalikan int, tapi saya tidak mengerti bagaimana Anda bisa menyamakannya dengan 5. Awalnya saya pikir itu adalah fungsi yang secara konstan mengembalikan 5 (dari pembelajaran saya baru-baru ini di F #, mungkin, haha), lalu saya berpikir, secara singkat, bahwa penunjuk fungsi menunjuk ke lokasi memori 5, tetapi itu tidak berfungsi, jelas, dan begitu juga dengan nilai hex.
Berpikir bahwa itu bisa jadi karena fungsinya mengembalikan int, dan menugaskan int itu ok (entah bagaimana), saya juga mencoba ini:
int * (*) (int *) = my_ptr
where my_ptr
is type int *
, type yang sama dengan function pointer kedua ini, seperti pada kasus pertama dengan type int. Ini tidak dapat dikompilasi. Menetapkan 5, atau nilai int apa pun, bukan my_ptr
, tidak dikompilasi untuk penunjuk fungsi ini juga.
Jadi apa maksud dari tugas itu?
Perbarui 1
Kami mendapat konfirmasi bahwa ini adalah bug, seperti yang ditunjukkan pada jawaban terbaik. Namun, masih belum diketahui apa yang sebenarnya terjadi pada nilai yang Anda tetapkan ke penunjuk fungsi, atau apa yang terjadi dengan penetapan tersebut. Penjelasan (bagus) apa pun tentang itu akan sangat dihargai! Lihat hasil edit di bawah untuk kejelasan lebih lanjut tentang masalah tersebut.
Edit 1
Saya menggunakan gcc versi 4.8.2 (di Ubuntu 4.8.2)
Edit 2
Sebenarnya, menyamakannya dengan apa pun berfungsi pada kompiler saya. Bahkan menyamakannya dengan variabel std :: string, atau nama fungsi yang mengembalikan double, berhasil.
Edit 2.1
Menariknya, menjadikannya penunjuk fungsi ke fungsi apa pun yang mengembalikan tipe data yang bukan penunjuk, akan membiarkannya dikompilasi, seperti
std::string (*) () = 5.6;
Tapi begitu penunjuk fungsi adalah ke fungsi yang mengembalikan beberapa penunjuk, ia tidak dapat dikompilasi, seperti dengan
some_data_type ** (*) () = any_value;