int (*) (int *) = 5(或任何整数值)的含义

2024-05-19

我无法弄清楚这一点:

int main() {
    int (*) (int *) = 5;
    return 0;
}

上述作业使用 g++ c++11 进行编译。我知道int (*) (int *)是一个指向接受一个函数的指针(int *)作为参数并返回一个 int,但我不明白你如何将它等同于 5。起初我以为这是一个不断返回 5 的函数(可能是我最近在 F# 中学习的,哈哈),然后我想,简单地说,函数指针指向内存位置 5,但这显然不起作用,十六进制值也不起作用。

认为这可能是因为函数返回一个 int,并且分配一个 int 是可以的(不知何故),我也尝试了这个:

int * (*) (int *) = my_ptr

where my_ptr属于类型int *,与第二个函数指针的类型相同,如第一种情况下的 int 类型。这不能编译。分配 5 或任何 int 值,而不是my_ptr,也不针对此函数指针进行编译。

那么任务是什么意思呢?

Update 1

我们已确认这是一个错误,如最佳答案所示。然而,目前尚不清楚到底是什么happens分配给函数指针的值,或者分配时发生的情况。任何(好的)解释都将非常感激!请参阅下面的编辑以更清楚地了解该问题。

Edit 1

我正在使用 gcc 版本 4.8.2(在 Ubuntu 4.8.2 中)

Edit 2

实际上,将它等同于我的编译器上可以运行的任何东西。甚至将其等同于 std::string 变量或返回 double 的函数名也是可行的。

Edit 2.1

有趣的是,将其设为指向任何返回非指针数据类型的函数的函数指针,将使其能够编译,例如

std::string (*) () = 5.6;

但是,一旦函数指针指向返回某个指针的函数,它就不会编译,例如

some_data_type ** (*) () = any_value;

这是 g++ 中的一个错误。

 int (*) (int *) 

是一个类型名称。

在 C++ 中,不能有没有标识符的类型名称声明。

所以这是用 g++ 编译的。

 int (*) (int *) = 5;

这也可以编译:

 int (*) (int *);

但它们都是无效声明。

EDIT:

T.C. https://stackoverflow.com/users/2756719/t-c mentions in the comments bugzilla bug 60680 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60680 with a similar test case but it has not yet been approved. The bug is confirmed in bugzilla.

EDIT2:

当上面的两个声明位于文件范围时,g++ 正确发出诊断(它无法在块范围发出诊断)。

EDIT3:

我检查过,可以在最新版本的 g++ 版本 4 (4.9.2)、最新预发布版本 5 (5.0.1 20150412) 和最新实验版本 6 (6.0.0 20150412) 上重现该问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

int (*) (int *) = 5(或任何整数值)的含义 的相关文章

随机推荐