哪个c++代码更高效?

Which C++ code is more efficient?

本文关键字:高效 代码 c++ 哪个      更新时间:2023-10-16

我正在尝试优化我的代码。我听说最好不要使用局部变量,并减少函数参数的数量,所以目前我的程序结构是这样的:

using namespace std;    
const string UPLOAD_LOCATION = "/uploads";    
const int value = 100;
const int type = 0;
const int max_value = 255;    
string var1, var2, var3;
void func1();
void func2();
void func4();
int main(int argc, char *argv[])
{
    func1();
    func2();
}
void func1()
{
  //do something
}
void func2()
{
  func4();
  //do something
}
void func4()
{
  //do something
}

如果var1, var2和var3是main函数中的局部变量,那么我将它们作为参数传递给函数会更有效吗?我的意思是这样的:

using namespace std;    
const string UPLOAD_LOCATION = "/uploads"; 
void func1();
void func2();
void func4();
int main(int argc, char *argv[])
{
    const int value = 100;
    const int type = 0;
    const int max_value = 255;    
    string var1, var2, var3;
    var1 = func1(var2, value, type, max_value);
    var3 = func2(var2);
}
string func1(string &var2)
{
  //do something
}
void func2(string &var2)
{
  func4(var2);
  //do something
}
void func4(string &var2)
{
  //do something
}

如果是,是通过引用传递还是通过值传递?例如,假设函数将结果存储在字符串s中,那么我应该做哪个选择:

a) void func( string in, string &result )    

b) string func( string in )

不要让所有的局部变量和参数都是全局的

没有…只是…停止。

让你的代码对你自己和其他人来说都是可以理解的。这应该是你的目标。这是你能做而电脑不能做的。

让你的编译器优化。这是它比你做得更好的地方。如果某些变量没有放到堆栈中,运行速度会快得多,那么编译器应该能够识别出这一点。

如果在创建类和方法时需要更具体的设计目标,请尝试最小化耦合并最大化内聚。很多时候,你甚至会发现当你这样做的时候,你会免费获得效率。

如果结果不够快,无法满足要求,并且编译器的优化设置已经全部设置完毕,那么只有在这种情况下,您才应该真正关注手动优化。在这种情况下,您得到一个分析器,并且实际上测量代码的哪些部分浪费了最多的时间,并修复这些部分。这样你就不会像一个盲人拳击手一样跌跌撞撞。

我将试着回答几个问题

在过去,如果你不担心你正在调用的方法修改值,那么通过引用传递总是比通过值传递更好。如果你按值传递,它必须做一个复制构造,如果你按引用传递,它只是传递一个指针。

也就是说,c++ 11在传递值方面更聪明、更高效。所以这不再是一个严格的规则。更多信息请参阅本文。

参考您的最后一个问题,关于将您的值作为参数或方法的输出返回。这篇文章善于指出优点和缺点

过早优化是万恶之源

首先要使你的程序具有可读性。然后让它工作,只有这样,只有在必要的时候优化它。首先在算法层面进行优化,然后运行profiler,找到程序花费时间最多的地方并对其进行优化。

对于你的问题:

void func( string in, string &result );
void func( string in );

让我们看看哪种方式调用这样的函数更具可读性:

string str;
func( "foobar", str );
vs:

string str = func( "foobar" );

你能猜出至少在哪种情况下strfunc()调用后被修改更容易理解吗?至于优化,c++委员会做了一项伟大的工作,使传递和返回值给/从函数的更自然的方式,效率与他们不太可读的等效。因此,不要再担心那些无关紧要的事情了,把注意力集中在编写一个好程序所必需的事情上。

我正在尝试优化我的代码。我听说最好不要使用局部变量,并减少函数参数的数量

最好不要使用全局状态(变量和对象),并减少函数参数的数量(这是有意义的)。你在这里的困惑似乎来自于这样一种想法,即"它更好"意味着"出于效率的原因它更好"。

您不会通过减少全局状态和函数参数的数量来优化代码的速度(或内存占用)。相反,您将比较功能并减少应用程序中各个模块的相互依赖性,从而使其更易于阅读,维护和扩展。

如果var1, var2和var3是main函数中的局部变量,那么我将它们作为参数传递给函数会更有效吗?

。这与效率无关(但是相同代码的第二个示例更容易阅读)。