为什么C 允许函数和类具有相同的名称

Why does C++ allow a function and a class have a same name?

本文关键字:许函数 函数 为什么      更新时间:2023-10-16
#include <iostream>
using namespace std;
struct A
{
    A()
    {
        cout << "A::A()" << endl;
    }
};
int A()
{
    cout << "void A()" << endl;
    return 0;
}
int main()
{
    auto v = A();
}

输出为:

void a()

为什么C 允许函数和类具有相同名称?

我相信这归结为与c。

的向后兼容性

在C中,当您像您一样声明struct时,您必须将其称为struct A,而不仅仅是A。例如:

void A() {}
struct A {};
void f()
{
    A();
    struct A x; // works fine
    A y; // does not compile
}

在这种情况下,允许 A表示两种不同的事情是有意义的,因为始终很清楚您的意思是,取决于您是否使用了struct

在C 中,struct S(和class ES)可以直接引用,而无需使用struct关键字。这介绍了您所关注的歧义,但另一种选择是,如上一个有效的C代码不是有效的C 代码,这甚至更糟。

为什么?因为这就是语言的方式! A::A()函数属于与A()不同的"域"。

它类似于名称空间,其中相同名称可以存在于多个域中。

它也有些类似于拥有一千个不同的功能(或范围),它们都有自己的环形计数器称为i