为什么C 允许函数和类具有相同的名称
Why does C++ allow a function and a class have a same name?
#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
。
相关文章:
- 构造函数/函数声明参数列表中的统一初始化
- 如何区分宏函数和函数函数而没有任何歧义?
- 在c++中为链接列表创建复制构造函数/函数
- 如何声明模板函数,以便可以在类构造函数/函数中传递
- 在C 中,如何调用构造函数函数
- bool值不在腔函数函数中重新调整false,c
- 用参数调用函数/函数,而不是参数
- 为什么在破坏函数函数中fstream Zero ernno
- 采用nulltpr_t的构造函数:函数定义不声明参数
- 调用函数函数从功能指针向量向量的函数指针
- Main 不能调用函数:函数未在此范围内声明
- 如何调用传递的函数(函数 ptr 作为参数传递给函数)
- 构造函数:函数不接受3个参数
- 如何理解函数函数参数中的星号(*)?
- 指向函数/函数表的指针
- LNK2019:函数"函数"中'symbol'引用未解析的外部符号;致命错误 LNK1120:1 未解析的外部
- 将函数函数传递给带有函数参数的std::线程.这可能吗?
- 在对象上调用特定的函数(函数指针)
- unordered_map自定义哈希/相等函数 - 函数不会被调用
- 编译器如何处理函数函数中重载的函数调用操作符