In another topic someone suggested using
auto x = f();
instead of
T x = f();
(if the signature of f
is T f()
). They pointed out this prevents silent object slicing if someone happens to change f
to U f()
, where U
descends from T
.
It makes sense to me, but there might be other things in play that I am missing. So, which is better and why?
One of the best advantaes of using
auto
in that context is, as Herb Sutter noticed at Almost Always Auto, thatauto
makes the usage of an API more mantenible. That is, the API can be modified/refactored without any necesary change in client code.For example:
API v1.0
API v2.0
Usage (Without auto)
Client updates API library to v2.0
Update using
auto