I generally prefer to pass by const ref. If function needs to make copy, it can always invoke copy constructor. If it doesn&#x27;t then all is well and performant. I know there are  optimizations that can happen if you pass by value and function intends to make a copy. But those are micro optimizations and I&#x27;ve always felt its not worth the confusion it creates to the caller as well as callee. Does anyone else follow this general rule of thumb?