我在代码库和在线中也看到了很多这种风格,如果你有一个带有for循环和if语句的函数,那么只有它们使用的所有变量都没有在它们之外声明。例如:
void process()
{
int i;
int count = 100;
vector3 point;
vector sum;
for (i = 0; i < count; ++i)
{
import(this, "pos", point);
sum += point;
}
sum /= count;
}
或者这是不成熟的优化?我对C ++,C#和Python感到好奇,这些是我使用的语言,我一遍又一遍地看到它们。
答案 0 :(得分:5)
许多旧代码都是这样做的,因为它在C89 / 90中是必需的。好吧,技术上,从来没有要求在函数的开头定义变量,只在块的开头。例如:
int f() {
int x; // allowed
x = 1;
int y; // allowed in C++, but not C89
{
int z=0; // beginning of new block, so allowed even in C89
// code that uses `z` here
}
}
C ++从来没有受过这种限制(而且C在很长一段时间内都没有),但是对于一些旧的习惯很难。对于其他人来说,保持代码库的一致性超过了定义接近他们使用位置的变量的好处。
就优化而言,这通常都不会产生任何影响。
答案 1 :(得分:1)
它在python中有所不同。这是一个范围问题,其中python将首先搜索包含局部变量的字典,然后向上移动到全局,然后内置。
python中的速度略有提升,但通常并不是很多。检查THIS问题以查看python的更多详细信息,包括一些测试。
我无法对C ++或C#发表评论,但由于它们是编译语言,因此它并不重要。
答案 2 :(得分:0)
没有区别。无论如何,它都在堆栈上。