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

时间:2017-02-17 03:09:10

标签: c++ function class standards language-design

String output = Month.JULY.getDisplayName( TextStyle.FULL , Locale.US ) ;

输出结果为:

  

void A()

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

2 个答案:

答案 0 :(得分:1)

我认为这归结为与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 ++代码,这更糟糕。

答案 1 :(得分:0)

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

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

它有点类似于拥有一千个不同的函数(或范围)都有自己的循环计数器i