为什么变量和函数不能重名?

问题描述 投票:0回答:2

我读过一篇文章解释了为什么函数和变量不能具有相同的名称,大多数人说这是因为如果我尝试获取这些东西的地址,编译器将无法理解我想要的,但在C ++中,重载函数是有效的,如果我尝试获取重载函数的地址,它会生成一个错误,所以为什么不在获取具有相同名称的变量和函数时生成一个错误,有人能告诉我为什么 C++ 标准不允许它吗?

c++
2个回答
4
投票

尝试获取同名变量和函数的地址时不需要生成错误,因为你不能在同一作用域中拥有具有相同名称的变量和函数

如果其中一个位于更严格的范围内,并且隐藏另一个,则不存在冲突,也没有理由产生错误。

尝试获取重载函数的地址而不提供解析提示会产生错误,因为编译器实际上无能为力;它不知道你在谈论哪个功能。


0
投票

这是一个已有多年历史的问题,但到目前为止,仍然没有人真正回答“为什么不能对函数和变量名冲突做同样的事情”,正如 @IlCapitano 在评论中指出的那样,OP 也提出了这样的问题。

我的想法是,对于重载函数(C++允许的),函数之间没有赋值(不是谈论函数指针!),即,在C++中将一个函数赋值给另一个函数是没有意义的,如下所示(再次不是函数指针):

function1 = function2;

这就是为什么C++允许函数重载,但显然不允许变量重载。

但是,询问重载函数或变量的地址是合法的。获取函数或变量地址的方法,只需使用名称字符串来搜索其地址即可。如果它们的名称相同,则会造成混淆,从而产生错误。

但是,为什么对于函数和变量名冲突,它这么早就检测到并输出编译错误,是因为赋值是一个非常浅的操作,并且它是变量的第一个也是必须的操作。因此,只要您对变量使用赋值操作,并且如果存在其他内容(例如作用域中具有相同名称的函数),C++ 编译器就会立即检测到错误。当您实际使用相同名称的字符串来尝试获取它们的地址时,不需要弹出错误。

© www.soinside.com 2019 - 2024. All rights reserved.