【发布时间】:2017-07-28 16:17:20
【问题描述】:
如果我有
#include <iostream>
int fun(int,int);
int main(void)
{
int foo=3;
int bar=5;
std::cout << fun(foo,bar);
}
int fun(int foo, int bar){ return foo+bar; }
是否会(可能)混淆(人为或编译器!)关于冲突名称foo 和bar,一个在函数定义中,一个在主程序主体中?
到目前为止,我发现结果都是正确的,但最好了解最佳实践。
事实上,我经常想不到,把这两个事件(如示例中的)命名为相同的。
(多年来我一直想知道这一点;这是非常基本的,我相信在 SO 的悠久历史中一定有人问过,但我现在找不到任何东西。如果重复,一定要告诉我。)
【问题讨论】:
-
当您提出这个问题时,您可能需要阅读有关范围的信息。在不同的范围内具有相同名称的变量并没有错,并且取决于编码风格(完全基于意见),它可以默认为您传递给函数的实际参数使用相同的名称,因为这些参数也在内部命名功能。
-
那么这是一个不同的问题,因为这个问题是关于 c++ 的:P。我是python的初学者,但我不敢相信它没有范围的概念
-
@Aminopterin Python 的答案是一样的,它也有词法范围(就像过去半个世纪左右的大多数语言一样)。
-
@Aminopterin Python 中的作用域是隐式的,因为没有像 C++ 中那样的变量声明,但无论如何都有作用域的概念。例如,在绝大多数编程语言中,不同函数中的函数局部变量可以具有相同的名称,但它们仍然是不同的。
-
我一直这样做,我认为这实际上是一种很好的做法,因为它可以帮助您跟踪数据。它还使将函数重构为更小的部分变得更加容易。