A good rule of thumb to know when to pass by ref for perf is :
- The struct is big, or contains mixed entities (floats and
ints). 2*size_t seems like a good heuristic from my experience.
- The struct have a postblit.
The compiler doing it is superior to the user marking
everything :
- The user may forget, getting slow down for nothing.
- The user can get it wrong the other way around (pass by ref
when it isn't appropriate).
- This is really hard to get right in generic code.
- This is relatively easy to automate.
I thought of something like this:
void foo(A& a) { // the compiler choose if A should pass by ref
or by value.
}
void bar(A a) { // normal behaviour.
}
That is identical with 'inline' in C++. You _can_ declare a
function as inline, but finally the compiler choose if he really
inline the function or not.