哪个c++代码更高效?
Which C++ code is more efficient?
我正在尝试优化我的代码。我听说最好不要使用局部变量,并减少函数参数的数量,所以目前我的程序结构是这样的:
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" );
你能猜出至少在哪种情况下str
在func()
调用后被修改更容易理解吗?至于优化,c++委员会做了一项伟大的工作,使传递和返回值给/从函数的更自然的方式,效率与他们不太可读的等效。因此,不要再担心那些无关紧要的事情了,把注意力集中在编写一个好程序所必需的事情上。
我正在尝试优化我的代码。我听说最好不要使用局部变量,并减少函数参数的数量
最好不要使用全局状态(变量和对象),并减少函数参数的数量(这是有意义的)。你在这里的困惑似乎来自于这样一种想法,即"它更好"意味着"出于效率的原因它更好"。
您不会通过减少全局状态和函数参数的数量来优化代码的速度(或内存占用)。相反,您将比较功能并减少应用程序中各个模块的相互依赖性,从而使其更易于阅读,维护和扩展。
如果var1, var2和var3是main函数中的局部变量,那么我将它们作为参数传递给函数会更有效吗?
。这与效率无关(但是相同代码的第二个示例更容易阅读)。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- C++中高效的大型稀疏块压缩线性方程
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何高效浏览OpenCV仓库理解代码?
- 如何使以下卤化物代码更加高效
- Python numpy 代码比 eigen3 或普通C++更高效
- 可视化优雅C++代码:如何使用 while 循环和条件语句编写更高效的代码
- 如何打包结构的成员以实现高效的跨平台代码
- 为可选的评测代码执行进行高效设计
- 更高效的 CPP 代码
- 如何使三角函数代码更高效
- (避免)在C++和高效编译中将代码拆分为.cpp和.h
- 如何在不重复每年的for循环的情况下使这个简单的代码更加高效
- 哪个c++代码更高效?
- 通过减少if语句使代码更高效