On Thursday, 6 September 2012 at 12:00:05 UTC, Artur Skawina
wrote:
On 09/06/12 13:34, Era Scarecrow wrote:
Alright let's go the opposite direction. Give me an example in
which passing a variable (by reference to a function) would
EVER require it to check the address to see if it was null.
Class/allocated objects should fail before the function gets
control. ie:
void func(ref int i);
class X {
int i;
}
X x;
int* i;
int[10] a;
func(x.i); /*should fail while dereferencing x to access i,
so never gets to func*/
func(*i); //does this count as a lvalue? Probably not,
func(a[0]);//none of these three should compile with that in
mind
func(0);
Being named variables, and likely non-classes you are then
left with mostly local variables, or arrays, or some type of
pointer indirection issue. But ever case I come up with says
it would fail before the function was called.
Both '*i' and 'a[0]' count. (Even '0' could be made to work as
a 'const ref' arg, but i'm not sure if that would be a good
idea)
I wasn't sure about *i. I can see it going either way. *i would
need to be dereferenced first, a[0] would need a bounds check
which then ensures it exists (even if it was dynamic); So
checking an address from ref wouldn't be needed in the func.