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.

Reply via email to