gpt4 book ai didi

c++ - 函数重载和读取 fdump-tree-all 输出

转载 作者:行者123 更新时间:2023-11-28 06:08:47 25 4
gpt4 key购买 nike

<分区>

我正在调查下面列出的函数重载问题,发现以下代码无法编译。

#include<iostream>
class Test {
static void fun(int i) {}
void fun(int i) {}
};

int main()
{
Test t;
return 0;
}

我的理解是成员函数在隐式编译时有一个额外的参数,一个指向编译函数中对象的指针。我不确定静态函数会发生什么。现在,为了弄清楚编译器在做什么,我尝试运行 g++ -fdump-tree-all failed_overload.cxx,我得到了下面列出的文件:

         failed_overload.cxx.001t.tu
failed_overload.cxx.002t.class
failed_overload.cxx.003t.original
failed_overload.cxx.004t.gimple
failed_overload.cxx.204t.statistics

我查看了 gimple 输出并发现了以下内容:

**

static void Test::fun(int) (int i)
{
GIMPLE_NOP
}
void Test::fun(int) (struct Test * const this, int i)
{
GIMPLE_NOP
}

**

好像静态函数只有一个int参数,但是成员函数多了一个this参数。如果是这样,为什么编译会失败,为什么我们不能用相同的签名重载静态函数。

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