gpt4 book ai didi

C++ - 复制和直接函数参数

转载 作者:太空宇宙 更新时间:2023-11-04 13:22:22 25 4
gpt4 key购买 nike

我有个奇怪的问题:

void _fnc1( const class& _var )  // takes up reference of _var , but cant modify it 
{ // i'd do this if i need speed.
// do something with _var...
};

void _fnc2( class _var ) // takes up a copy of _var
{ // any modification of _var now stays only in the function scope
// do something with _var...
};

如果我以后做类似的事情:

_fnc1( 1 );

_fnc2( 1 );

_fnc1 还会更快吗(假设“class”是 int)?

最佳答案

对于int,它不会对速度产生太大影响。尽管编译器在某些情况下可以进行一些额外的优化 - 例如使用 const 时也是如此。

如果对象更大,和/或需要调用它们的复制构造函数,这将很重要。

int 的其他内置类型的小参数类型在某些情况下可以直接存储在寄存器中。对此类类型使用指针或引用不会在速度上产生太大差异(它们占用的空间大致相同),除了一些编译器优化。

is it slower to declare our iterator within the for loop, such as: for ( int i = 0; ... ) ( say we have a bunch of loops that could use the same iterator within the same scope ), or is it better to declare it in the outside scope, as a variable, such as int i; for ( i = 0; ... );? My logic is that it's faster to declare it outside, if we could reuse it, but i can't be completely sure

一般规则是尽可能晚地声明变量(即尽可能靠近您需要它们的地方)。但同样,编译器可以非常聪明,并且在大多数情况下会优化它。

至于您的具体示例:进行测试总是很有趣。编译器很可能会优化大部分差异,甚至可能生成相同的代码(或内联整个函数)。

最好的测试是查看生成的汇编代码。从中可以学到很多东西。

关于C++ - 复制和直接函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34712560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com