You can pass by value if copying is cheap (for example you want to pass an integer or char) or when you know that you have to make a copy anyway. Otherwise passing by reference is cheaper.