Я не можу зрозуміти це:
int main() {
int (*) (int *) = 5;
return 0;
}
Вищевказане призначення компілюється з g ++ c ++ 11. Я знаю, що int (*) (int *)
це вказівник на функцію, яка приймає (int *)
аргумент як аргумент і повертає int, але я не розумію, як ви можете прирівняти його до 5. Спочатку я думав, що це функція, яка постійно повертає 5 (з мого недавнього навчання в F #, мабуть, ха-ха), тоді я коротко подумав, що покажчик функції вказує на розташування 5 пам’яті, але це, очевидно, не працює, як і шістнадцяткові значення.
Думаючи, що це може бути тому, що функція повертає int, і що присвоєння int - це нормально (якось), я також спробував це:
int * (*) (int *) = my_ptr
де my_ptr
має тип int *
, той самий тип, що і цей другий покажчик функції, як у першому випадку з типом int. Це не компілюється. Призначення 5, або будь-яке значення int, замість my_ptr
, також не компілюється для цього покажчика функції.
То що означає призначення?
Оновлення 1
Ми маємо підтвердження, що це помилка, як показано в найкращій відповіді. Однак досі невідомо, що насправді відбувається зі значенням, яке ви присвоюєте покажчику функції, або що відбувається з присвоєнням. Будь-які (хороші) пояснення щодо цього були б дуже вдячні! Будь ласка, зверніться до редагувань нижче, щоб зрозуміти проблему.
Редагувати 1
Я використовую gcc версії 4.8.2 (в Ubuntu 4.8.2)
Редагувати 2
Власне, прирівнювати це до чого-небудь працює на моєму компіляторі. Працює навіть прирівняння її до змінної std :: string або імені функції, яка повертає подвійну.
Редагувати 2.1
Цікаво, що якщо зробити його покажчиком функції на будь-яку функцію, яка повертає тип даних, який не є вказівником, це дозволить йому скомпілювати, наприклад
std::string (*) () = 5.6;
Але як тільки покажчик функції переходить до функції, яка повертає деякий покажчик, він не компілюється, наприклад, з
some_data_type ** (*) () = any_value;