c – 将变量传递给函数的成本
发布时间:2020-12-16 06:46:42 所属栏目:百科 来源:网络整理
导读:我不确定函数调用是如何被翻译的,我担心传递的变量会在不需要时被复制到局部变量中.我可以通过使用全局变量避免不必要的复制,但这不是一个好的解决方案…… 1)当目标函数中的变量没有改变时,将它们作为指针,引用或const传递会更好吗? void fkt1(int i,int j
|
我不确定函数调用是如何被翻译的,我担心传递的变量会在不需要时被复制到局部变量中.我可以通过使用全局变量避免不必要的复制,但这不是一个好的解决方案……
1)当目标函数中的变量没有改变时,将它们作为指针,引用或const传递会更好吗? void fkt1(int i,int j){
do_something();
printf("%d",i+j);
}
int main(){
int i = 5;
int j = 6;
fkt1(i,j);
}
2)当变量未在其中使用时将变量传递给函数是否昂贵.例如,保持通用接口,例如: template <typename T>
void fkt2(T a,T b,int len = -1){
do_something();
printf("%d",a+b);
}
template<>
void fkt2<char*>(char* a,char* b,int len){
do_something();
strcpy(a+len,b);
printf("%s",a);
}
要么 class base{
public:
virtual bool calc(int i,int j,int k,int l) = 0;
base *next1;
base *next2;
}
class derived1 : public base{
public:
bool calc(int i,int l){
return (next1->calc(int i,int l) ||
next2->calc(int i,int l))
}
}
class derived2 : public base{
public:
bool calc(int i,int l){
return (return i+j > 5)
}
}
class derived3 : public base{
public:
bool calc(int i,int l){
return (return j*k < l)
}
}
评论非常感谢. 解决方法
此时不要担心性能问题.
专注于功能的算法成本,而不是琐碎的事情:猜测性能问题是一个坏主意. 如果您确实遇到了性能问题并且具有可维护的代码,那么仍然需要时间来改进它. 现在要真正回答这个问题: 当您必须传递的对象确实不应该被复制时,您可以传递const引用.如果你必须传递整数或简单的结构(也就是小类型),使用const引用甚至指针可能工作太多:如果编译器可能无论如何都会对事物进行优化,那么你将会以非常复杂的方式混乱代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
