Hacker News new | ask | show | jobs
by indogooner 2209 days ago
>> The first one is that if we overload the comma operator, we need to be extra careful to cover all cases and think about lvalues and rvalues. Otherwise we end up with buggy code.

Extra careful to cover all cases is when I start looking at alternatives. In this case it is not even enhancing readability. Even if you may be an excellent programmer think whether your team can be that extra careful most of the times before introducing these quirks in your code.

1 comments

“Extra careful to cover all cases is when I start looking at alternatives.“

IMO, an advantage of C++ is that, in well-written code, being extra careful is (mostly) limited to the implementer of code, not to its users.

It would be nice if nobody would have to be extra careful, but that’s the price you pay for power, I fear.

Rust shows that you can remove most of the footguns, and keep the power with a much smaller "extra careful" surface.

For example, instead of a comma operator and its overloads, you can have tuples. Then `let (a,b) = (b,a)` works as expected. If you want weird code, you can overload `vec += (1,2,3,4,5)` with a tuple, and that's a straightforward case with no hidden gotchas.