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

pet*_*555 6 c c++ performance coding-style cppcheck

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

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

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

    // ... I use x variable here
}
Run Code Online (Sandbox Code Playgroud)

我认为我的代码没问题.你怎么看?它会变成这样的东西吗?

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

    // ... I use x variable here
}
Run Code Online (Sandbox Code Playgroud)

在第二个代码中,为所有迭代定义了变量x ...不是不好(不是最佳的),我猜...

Vla*_*cow 7

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

  • 不是原始类型,例如std :: string怎么样?相同? (2认同)

Wol*_*olf 6

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

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

    // ... I use x variable here
}    
Run Code Online (Sandbox Code Playgroud)

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

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


mjs*_*mjs 5

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

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

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

我们都知道我们应该保持函数的简短和重构,但我们都见过那些 5000 行长的怪物,在顶部声明一个变量,并使用一次,3789 行。如果没有,可惜剩下的我们。