Jump to page: 1 2
Thread overview
auto
Jun 20, 2007
Hoenir
Jun 20, 2007
Derek Parnell
Jun 21, 2007
Ary Manzana
Jun 21, 2007
BCS
Jun 21, 2007
Derek Parnell
Jun 22, 2007
Bill Baxter
Jun 22, 2007
Frits van Bommel
Jun 22, 2007
Ary Manzana
Jun 20, 2007
Hoenir
Jun 22, 2007
janderson
Jun 22, 2007
janderson
June 20, 2007
I still can't get the purpose of "auto".
I know it makes it possible to e.g. write "auto y = 4u;" but why not just "uint y = 4;"?
June 20, 2007
On Wed, 20 Jun 2007 14:20:43 +0200, Hoenir wrote:

> I still can't get the purpose of "auto".
> I know it makes it possible to e.g. write "auto y = 4u;" but why not
> just "uint y = 4;"?

   auto y = someFunc();   // What type is it now?


-- 
Derek Parnell
Melbourne, Australia
"Justice for David Hicks!"
skype: derek.j.parnell
June 20, 2007
Hoenir wrote:

> I still can't get the purpose of "auto".
> I know it makes it possible to e.g. write "auto y = 4u;" but why not
> just "uint y = 4;"?

One day you may want to write

class foo(a = int, b = int) { }

void main() {
  auto bar = new foo!(foo!( foo!(foo!(), foo!()), foo!(foo!(), foo!()) ),
foo!(foo!(), foo!()));
}
June 20, 2007
"Hoenir" <mrmocool@gmx.de> wrote in message news:f5b64b$1aeq$1@digitalmars.com...
>I still can't get the purpose of "auto".
> I know it makes it possible to e.g. write "auto y = 4u;" but why not just "uint y = 4;"?

I agree in this case, and I think some people get a little type-inference-happy.  But it's very useful in the cases that Derek and mwarning have posted, and I use it a lot in templates as well (rather than picking apart a complex type to determine the correct type for a variable, just use auto).


June 20, 2007
Jarrett Billingsley wrote:
> I agree in this case, and I think some people get a little type-inference-happy.  But it's very useful in the cases that Derek and mwarning have posted, and I use it a lot in templates as well (rather than picking apart a complex type to determine the correct type for a variable, just use auto). 
> 
I see. This makes sense. Thank you all. :)
June 21, 2007
Derek Parnell escribió:
> On Wed, 20 Jun 2007 14:20:43 +0200, Hoenir wrote:
> 
>> I still can't get the purpose of "auto".
>> I know it makes it possible to e.g. write "auto y = 4u;" but why not just "uint y = 4;"?
> 
>    auto y = someFunc();   // What type is it now?
> 
> 

// What can you do with y now, if you don't know the type?
June 21, 2007
Ary Manzana wrote:
> Derek Parnell escribió:
>
>> On Wed, 20 Jun 2007 14:20:43 +0200, Hoenir wrote:
>>
>>> I still can't get the purpose of "auto".
>>> I know it makes it possible to e.g. write "auto y = 4u;" but why not
>>> just "uint y = 4;"?
>>
>>
>>    auto y = someFunc();   // What type is it now?
>>
>>
>
> // What can you do with y now, if you don't know the type?

whatever you want

auto z = y * 2;
auto x = z*y;
return x + y + z;

With a little care and a working knowledge of the typing rules of expressions you can get a lot done without ever using a actual type.

This is of a lot of use if you are doing template code where you really can't known the type until compile time.
June 21, 2007
On Wed, 20 Jun 2007 21:37:44 -0200, Ary Manzana wrote:

> Derek Parnell escribió:
>> On Wed, 20 Jun 2007 14:20:43 +0200, Hoenir wrote:
>> 
>>> I still can't get the purpose of "auto".
>>> I know it makes it possible to e.g. write "auto y = 4u;" but why not
>>> just "uint y = 4;"?
>> 
>>    auto y = someFunc();   // What type is it now?
>> 
> 
> // What can you do with y now, if you don't know the type?

Pass it to a function that does know its type.


  void funcA(int X) {  }
  void funcA(float X) { }
  void funcA(char[] X) { }

  auto y = someFunc();

  funcA(y);


-- 
Derek
(skype: derek.j.parnell)
Melbourne, Australia
21/06/2007 12:30:47 PM
June 22, 2007
Derek Parnell wrote:
> On Wed, 20 Jun 2007 21:37:44 -0200, Ary Manzana wrote:
> 
>> Derek Parnell escribió:
>>> On Wed, 20 Jun 2007 14:20:43 +0200, Hoenir wrote:
>>>
>>>> I still can't get the purpose of "auto".
>>>> I know it makes it possible to e.g. write "auto y = 4u;" but why not just "uint y = 4;"?
>>>    auto y = someFunc();   // What type is it now?
>>>
>> // What can you do with y now, if you don't know the type?
> 
> Pass it to a function that does know its type.
> 

I *think* the point was just that the code becomes less readable without any obvious indication of what type you've got.  Sure you can do all the same things you could do it the type were explicit, but someone else asked to fix this code is going to have to track down "someFunc()" to see what it returns.

Lacking any particular extenuating circumstances, I agree that that making types explicit is better than using auto.  But auto makes sense when
1) the actual type is a built-in (auto x = foo.length)
2) the actual type is obvious (auto x = new MyClass())
3) the actual type is huge/untypeable like
   ( Node!(Node!(Node!(Expr!(Terminal!(1),Terminal!(2))))) x = expr!();
4) the actual type is unknowable (some template usages)

or

5) when you're in a real hurry and don't have time to figure out what the actual type is.  :-)

--bb
June 22, 2007
Hoenir wrote:
> I still can't get the purpose of "auto".
> I know it makes it possible to e.g. write "auto y = 4u;" but why not just "uint y = 4;"?

Its a generic/maintainable way of programming.  It means you can change the types your using without having to change ever reference to it.  It means you can copy paste or template a piece of code and have it work with little change.

It gets even more useful in larger programs when you start to layer this sort of general programming.

I hope that helps.
« First   ‹ Prev
1 2