Comma Operator RAII Abuse
Here’s a neat little trick that one of my co-workers, Clint Levijoki, discovered. In C++ you often use an RAII wrapper that you place on the stack if you want to be sure that code gets run at a later point. One good example would be std::lock_guard which you use if you want to be sure that a lock gets released in the future, or scoped profiling which you use to stop a timer in the future. For example for this:
std::string foo(); void bar() { std::string baz = foo(); // do something with baz }
If you want to profile foo() you’d write it like this:
std::string foo(); void bar() { std::string baz; { ScopedProfiler profile_foo("foo()"); baz = foo(); } // do something with baz }
Which is less pretty and slightly slower. Alternatively you can use the comma operator and do it like this:
std::string foo(); void bar() { std::string baz = (ScopedProfiler("foo()"), foo()); // do something with baz }
And this will start a timer before calling foo(), and stop the timer after calling foo(). You could wrap it in a macro to make it more readable. And the benefit is obviously that you don’t have to destroy your function flow when you want to insert RAII objects.