CppCheck。变量的范围可以减少(和循环)

时间:2014-05-12 08:52:03

标签: c++ c performance coding-style cppcheck

CppCheck找到了一些调查结果:"变量的范围' x'可以减少"。

如果我遇到这种情况该怎么办:

int x;
for (int i = 0; i != 10; ++i)
{
    x = someFunction();

    // ... I use x variable here
}

我认为我的代码没问题。你怎么看?它应该改变吗?

for (int i = 0; i != 10; ++i)
{
    int x = someFunction();

    // ... I use x variable here
}

在第二个代码中,为所有迭代定义了一个变量x ... Isn不正常(不是最优的),我猜..

3 个答案:

答案 0 :(得分:6)

如果变量x不在循环外使用,那么第二种方法要好得多。并且代码的优化没有任何问题。变量的内存在循环中只分配一次。

答案 1 :(得分:6)

int声明的位置没有性能影响,因此Cppcheck在提出此样式问题时是正确的。此样式问题也可以应用于非平凡类型,

for (int i = 0; i != 10; ++i)
{
    MyType x = someFunction();

    // ... I use x variable here
}    

因为构造函数往往与赋值一样有效。从版本1.65开始,Cppcheck似乎不区分琐碎和非平凡类型。

但是不要盲目地遵循这样的风格建议,会有一些非平凡的类型,其中分配比建设更有效。 (像往常一样:如果对性能有疑问,请测量!)

答案 2 :(得分:2)

正如其他人所提到的,对于琐碎的类型,它不太可能对性能产生重大影响。

但是,您还应该考虑通过缩小范围,通过使声明更接近使用来帮助提高可读性,并且可能更重要的是,使重构更容易。

在考虑可维护性时,这两者都很重要。

我们都知道我们应该保持功能简短和重构,但我们都看到了那些5000行长怪物,其中变量被声明在顶部,并使用了一次,3789行。如果你< / em>没有,可怜我们其他人。