我在我的地方很新,所以我应该在表达担忧之前三思,但我已经看到一些代码...VS2010 C++/C#编译器可以优化掉在循环内声明的变量吗?
当我试图提高可读性时,我被告知并不总是那时候,效率要重要得多。
但是后来我在不同类型的循环内部看到变量重新声明,有时甚至到了两个级别。我的一部分认为 - 永远不要那样做!但另一部分则说 - 无论如何,这个复杂的功能应该分解成几个功能。那些较小的函数可以有临时变量,编译器应该能够照顾它们。
然后函数调用会增加一些额外的成本。让我试着拿出2个例子:
Class1::Do1()
{
for (int i = 0; i < 100; i++)
{
bool x = GetSomeValue();
...
if (x)
{
...
}
}
}
VS
Class1::Do1()
{
bool x = false;
for (int i = 0; i < 100; i++)
{
x = GetSomeValue();
...
if (x)
{
...
}
}
}
VS
Class1::Do1()
{
for (int i = 0; i < 100; i++)
{
Do2();
}
}
Class1::Do2()
{
bool x = GetSomeValue();
...
if (x)
{
...
}
}
第一种方法看起来我错了,我总是喜欢第二次,甚至第三次,当我自己写代码。我认为由于额外的函数调用,第三种方式可能会更慢。第一种方法有时甚至可能看起来粗略 - 如果函数很长,声明将远离使用的地方。另一件事是,我的例子太简单了 - 编译器可能会弄清楚如何简化,也许内联所有3.不幸的是,现在我不记得其他例子,我认为是不合理的,只是想提一些变量是重新宣布n * m次,因为它们是两个深度级别(2个圈内)。
魔鬼的拥护者说 - 你怎么知道100%这可能不是有效的?我的纯粹主义者(我的版本)认为,一遍又一遍地重新声明相同的变量是愚蠢的 - 至少在阅读代码时抛出一个变量。
想法?有问题吗?
通常,尝试在适当的范围声明变量。如果bool x不在for循环外部使用,请不要在for循环之外声明它。 [在C#范围变量]的 – Joe 2010-12-02 02:41:31
可能重复(http://stackoverflow.com/questions/3979493/scope-of-variables-in-c) – Joe 2010-12-02 02:42:52
谢谢,乔。我想知道另一种语言 - C++/C++ CLI。 – 2010-12-02 02:46:54