Значение int (*) (int *) = 5 (или любое целочисленное значение)
Я не могу понять это:
int main() {
int (*) (int *) = 5;
return 0;
}
Вышеуказанное назначение компилируется с g ++ c ++ 11. я знаю этоint (*) (int *)
указатель на функцию, которая принимает(int *)
в качестве аргумента и возвращает int, но я не понимаю, как вы могли бы приравнять его к 5. Сначала я подумал, что это функция, которая постоянно возвращает 5 (из моего недавнего изучения F #, возможно, ха-ха), затем я подумал, кратко указатель на функцию указывает на ячейку памяти 5, но это, очевидно, не работает, равно как и шестнадцатеричные значения.
Думая, что это может быть потому, что функция возвращает целое число, и что присвоение целого числа в порядке (каким-то образом), я также попробовал это:
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;