Nullable types

Denis Koroskin 2korden at gmail.com
Tue Oct 21 09:39:28 PDT 2008


On Tue, 21 Oct 2008 04:43:18 +0400, Bill Baxter <wbaxter at gmail.com> wrote:

> On Tue, Oct 21, 2008 at 9:35 AM, Bill Baxter <wbaxter at gmail.com> wrote:
>> On Tue, Oct 21, 2008 at 9:11 AM, Lionello Lunesu  
>> <lio at lunesu.remove.com> wrote:
>>> Bent Rasmussen wrote:
>>>>
>>>> Not true. It wraps the value type in a struct with a boolean field
>>>> expressing whether it is null or not.
>>>>
>>>> http://msdn.microsoft.com/en-us/library/1t3y8s4s(VS.80).aspx
>>>
>>> Indeed. Thanks for pointing that out.
>>>
>>> So C#'s 'foo?' syntax has even less to do with this compile-time  
>>> nullness
>>> checking.
>>
>> Now it makes sense.  Yes the C# feature is apparently just a
>> convenient way to create a value type with a special
>> "none-of-the-above" value.
>> I guess this feature is driven by need to connect with databases that
>> often have nullable types.
>>
>> This chapter of a C# 2.0 book covering Nullable Types seems to agree
>> with that assessment :
>> http://www.springerlink.com/content/w2mh0571776t3114/
>
> Also C++ has *non*-Nullable types in the form of references.
>
> void aFunction(ref Struct xyz) {
>      // &xyz is a pointer that can't be null
> }
>
> ref Struct anotherFunction() {
>     ...
> }
>
> &(anotherFunction()) --> can't be null
>
> I think that may be a C++ FAQ  for "When do I use references vs
> pointers?"  One answer to that is that if you don't want to allow
> NULLs, use a reference.  If you do, then use a pointer.
>
> --bb

That's not entirely true:

void foo(Bar& bar) { ... }

Bar* bar = NULL;
foo(*bar); // reference is NULL

In practice, however, I never got a NULL-reference passed.



More information about the Digitalmars-d mailing list