Я не могу понять этого:
int main() {
int (*) (int *) = 5;
return 0;
}
Приведенное выше назначение компилируется с g ++ c ++ 11. Я знаю, что int (*) (int *)
это указатель на функцию, которая принимает (int *)
аргумент as и возвращает 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 или имени функции, возвращающей значение типа double.
Изменить 2.1
Интересно, что если сделать его указателем функции на любую функцию, которая возвращает тип данных, который не является указателем, это позволит ей компилироваться, например
std::string (*) () = 5.6;
Но как только указатель функции находится на функции, которая возвращает какой-то указатель, он не компилируется, например, с
some_data_type ** (*) () = any_value;