Для чего писать typedef в объявлении указателя на функцию?
typedef int(*Message)(const char* message);
Для чего в таких случая писать typedef?Почему нельзя без него,ведь в таком случае мы так же объявим указатель на функцию?Что происходит при данном обьявлении?
Ответы (2 шт):
Автор решения: AlexGlebe
→ Ссылка
Всё как и положено, typedef - объявляет тип, а без него будет переменная (указателя на функцию).
typedef int(*Message)(const char* message);
// Message - это тип указателя на функцию
int me(const char* message){return 0 ;}
// переменной заданного типа назначаю адрес реальной функции me
Message m = & me ;
Message m2 = me ;
// mep - это указатель на функцию
int (*mep)(const char* message) = & me;
// этому казателю присвоен адрес функции
int rp = (*mep)("");
int rp2 = mep("");
Автор решения: dIm0n
→ Ссылка
Думаю, так станет понятно:
#include <type_traits>
typedef int(*Message)(const char* message); // алиас для типа
int (*message)(const char* message); // объявление указателя
static_assert(std::is_same_v<Message, int (*) (const char*)>);
static_assert(std::is_same_v<decltype(message), int (*) (const char*)>);
Message message_2 = message;
int main() {
message = message_2;
}
Также, возможно, будут полезны ответы на Как прочесть запись функции с указателем.