关于typedef void (*V_FUNC)();//定义函数指针
这段代码出自
C++:多态 详解_c++多态_sponge’的博客-CSDN博客多态的概念:通俗来说,就是多种形态,。举个例子:比如,当买票时,是全价买票;买票时,是半价买票;买票时是优先买票。再举个栗子:最近为了,支付宝年底经常会做诱人的的活动。那么大家想想为什么有人扫的红包又大又新鲜8块、10块…,而有人扫的红包都是1毛,5毛….。其实这背后也是一个多态行为。支付宝首先会分析你的账户数据,比如你是新用户、比如你没有经常支付宝支付等等,那么你需要被鼓励使用支付宝,那么就你扫码金额=;……………………………https://blog.csdn.net/zhang\_si\_hang/article/details/126173598
sponge佬非常厉害,总结得非常好,非常仔细, 推荐大家学完多态后回顾时可以看一下。
言归正传,代码如下:
typedef void (*V_FUNC)();//定义函数指针
对于这段代码有一种错误想法,typedef void (*V_FUNC)();可以简单地理解为(*V_FUNC)()代替了void?不可以,因为typedef
的作用是为一种类型定义一个新的名称,让这种类型更方便地被使用。在这个例子中,V_FUNC
就是一个新的名称,它被定义为一个函数指针类型,指向一个不带参数、返回值为 void
的函数。这时某些和我一样基础不扎实的选手开始反驳了:typedef int count 这段代码的意思就是 count 代替 int 使用吧?那你为什么(*V_FUNC)不是代替void使用?因为typedef的机制就是这样,其实上面那段代码已经定义了新名称了,如果你想写 typedef V_FUNC void (*V_FUNC)();毫无疑问也是错误的 。因为 typedef void (*V_FUNC)(); 的意思就是:定义一个类型 V_FUNC
,它是一个指向函数的指针,该函数返回 void
,不接受任何参数。其中括号的作用是指定指针所指向的函数的参数和返回值类型,而 typedef
则是将这个函数指针类型取一个别名 V_FUNC
,方便后续代码的书写和使用。
另一段代码:
typedef void(*)() V_FUNC; //sponge佬的注释为不能这么写
的确不可以这么定义函数指针。因为在 C++ 中,定义一个函数指针类型需要使用括号将指针类型括起来。
那我们不用typedef可以了吧?
可以;但是,如果没有typedef,我们需要在声明函数指针变量时每次都写出完整的语法,例如:
void (*func_ptr)(); // 声明一个返回类型为 void,参数列表为空的函数指针变量
而有了typedef,我们就可以将这个冗长的语法定义为一个类型别名,以后直接使用这个类型别名即可,例如:
typedef void (*V_FUNC)(); // 定义一个类型别名 V_FUNC,代表一个返回类型为 void,参数列表为空的函数指针类型
V_FUNC func_ptr; // 声明一个 V_FUNC 类型的函数指针变量
我们可以看到,使用typedef可以让代码更加简洁易读,减少了重复代码,提高了可读性和可维护性。
还没有评论,来说两句吧...