views:

455

answers:

6
+5  Q: 

auto c/c++

Has anyone ever seen the storage class auto explicitly in use in c/c++? If so, in what situation?

+19  A: 

auto is never useful in current C/C++ because all variables are implicitly auto. It is useful in C++0x, where it can replace the type declaration entirely - if you have a variable with an initial assignment, 'auto' will just make it the type of that assignment value, as in the comments.

alex strange
Could you include an example of C++0x use?
c0m4
auto funcptr = std::tr1::bind( This declares "funcptr" to be of the same type as "bind" returns (which is a seriously complicated type; in old days, you'd wrap it up in a std::tr1::function template, but with auto you don't need to do that anymore).
Chris Jester-Young
Is this a special case or does it work more in general, likeauto someVar = functionThatReturnsUnknownType();?
c0m4
It works in general. Basically it's allowing variable type deduction at the initialization/construction site. The compiler already does this for templates ( template<class T> void foo(T t); ) and 'auto' makes it happen in function bodies.
Dean Michael
+1  A: 

No, it's assumed if you omit the class specifier. The only reasonable uses I can think of would be to call attention to a particular local variable that overrides, say, a global variable with the same name, or as an interview question.

Chances are, you'll confuse the poor programmer who's stuck maintaining the code!

Adam Liss
+2  A: 

I haven't seen auto used in code written in the last 10+ years. There is no reason to use auto since the only places you can use it is where it is implied anyway. The only reason it still exists is for backwards compatibility but it should be avoided in new code.

Robert Gamble
+1  A: 

auto is good for declaring vehicles :-)

dmityugov
or eroticAsphyxiation
fizzer
+1  A: 

As Alex has covered, auto is used in C++0x to declare types in initialisation declarations where the type is inferred from the initialisation code.

There was a proposal for it to also be used as a return type, where the type is deduced from code returning a value. However this gave rise to an ambiguity so, at time of writing, something more consistent with C++0x's lambda syntax is being considered.

Phil Nash
+2  A: 

In GCC you might need auto to declare nested function in order to be able to define it anywhere in function body - see http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Nested-Functions.html

qrdl
Right at the top of that page it says that nested functions are not supported for GNU C++. So does the auto stuff regarding nested functions apply to other implementions of C++?
c0m4
@c0m4: It would be safest to assume that GNU C extensions like nested functions are not available with other compilers.
Jonathan Leffler