gpt4 book ai didi

c++ - 澄清指向函数转换的指针

转载 作者:太空狗 更新时间:2023-10-29 21:27:47 25 4
gpt4 key购买 nike

函数类型(左值)可以转换为指向函数的指针(右值)。

int func();
int (*func_ptr)() = func;

但是从(4.1/1)开始

An lvalue (3.10) of a non-function, non-array type T can be converted to an rvalue.

这是否意味着函数没有完成左值到右值的转换?另外,当数组衰减为指针时,它不会返回一个指针右值吗?

最佳答案

函数是左值。指向函数(数据类型)的指针可以是任何一个;如果你给它一个名字,它就是一个左值;否则,它不是(粗略地说)。指向函数的指针遵循所有通常的左值右值转换规则。对于简单类型,如基本类型或指针,左值到右值的转换基本上意味着读取变量。

void func();            //  Declares func
(*(&func))(); // The expression &func is an rvalue
void (*pf)() = &func; // pf is an lvalue
(*pf)(); // In the expression *pf, pf undergoes an
// lvalue to rvalue conversion

请注意,函数隐式转换为指向的指针函数,并且 () 运算符对函数和指向函数的指针,所以最后两行可以写成:

void (*pf)() = func;
pf();

一如既往,转换的结果是一个右值(除非转换为引用类型)。这也是数组时的情况隐式转换为指针;数组和函数都只能作为左值存在,它们都隐式转换为指针,这是一个右值。但是那个指针可以用来初始化一个适当指针类型的变量;这样的变量是左值。

关于c++ - 澄清指向函数转换的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8573763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com