首页 > 代码库 > C++,当类名和对象名称相同时会发生什么?
C++,当类名和对象名称相同时会发生什么?
今天突发奇想,如果类名和由这个类声明的对象标识符相同时会发生什么,然后就测试了一下。如下:
#include <iostream>using namespace std;class a{public:a() {cout << "a~~~~~" << endl;}};int main(void){ a a; return 0;}
正常编译通过,运行结果也是正常的。仔细想想这种结果也是意料之中的,因为在main函数体中刚开始的时候遇到第一个a,由于main局部域没有a的声明,所以继续向外面的全局域寻找,接着找到a的声明,并解析a是一个类,之后遇到第二个a,这时这个a成了一个类型为a的对象,此声明后局部域中的a已经隐藏了全局域中的a,如若继续写a b;肯定会报错,如下:
#include <iostream>using namespace std;class a{public:a() {cout << "a~~~~~" << endl;}};int main(void){ a a; a b; return 0;}
这次是肯定无法编译通过的。如果再想访问全局的那个a只能用域操作符了(::a),如下:
#include <iostream>using namespace std;class a{public:a() {cout << "a~~~~~" << endl;}};int main(void){ a a; //a b; ::a b; return 0;}
C++,当类名和对象名称相同时会发生什么?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。