我有一个奇怪的问题:
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会更快(让我们说"类"是int)?
答案 0 :(得分:0)
对于int
,它在速度方面不会有太大差异。虽然编译器可以在某些情况下进行一些额外的优化 - 例如,当使用const
时。
如果对象较大,并且/或者需要调用它们的复制构造函数,那将很重要。
在某些情况下,像int
其他内置类型这样的小参数类型可以直接存储在寄存器中。除了一些编译器优化之外,对这些类型使用指针或引用不会对速度产生很大影响(它们占用相同的空间)。
在for循环中声明迭代器是否较慢,例如:for (int i = 0; ...)(假设我们有一堆可以使用的循环 同一个范围内的同一个迭代器),或者声明它更好 在外部范围内,作为变量,如int i; for(i = 0; ... );?我的逻辑是,如果我们可以的话,在外面宣布它会更快 重复使用它,但我无法完全确定
一般规则是尽可能晚地声明变量(即尽可能接近您需要的变量)。但同样,编译器可以非常智能,并且在大多数情况下会优化它。
至于你的具体例子:做测试总是很有意思。有可能编译器会优化大部分差异,甚至可能生成相同的代码(或内联整个函数)。
最好的测试是查看生成的汇编代码。从中可以学到很多东西。