|
Boost : |
From: Fernando Cacciola (fernando_cacciola_at_[hidden])
Date: 2005-10-17 16:31:41
Eric Niebler wrote:
> AlisdairM wrote:
>>
>> int a = 13;
>> int &b = a;
>> int c = 42;
>>
>> optional< int & > d = b;
>> d = c;
>>
> <snip>
>>
>> For the curious, the current answer is option 3 - d rebinds a
>> reference to c.
>
Ha, very interesting experiment!!
I agree the semantics are subtle, I aways did. Yet the as I've been trying
to explain the alternative is even more subtle.
I wonder what would be the result of the following thought experiment:
Please, answer the questions _without_ looking at the answers, and if
possible post your initial results; then compare with the answers.
int a = 1;
int b = 2 ;
int c = 3 ;
int &ra = a;
int &rb = b;
int &rc = c;
optional<int&> o = ra;
o = rb ; // [1]
o = none ;
o = rc ; [2]
(a) What is the value of 'a' after [1]?
(b) What is the value of 'a' after [2]?
ANSWERS:
If no-rebinding is used, the answers are:
(a) 2
(b) 2 // Is not '3' because 'a' is "released" at 'o=none'
If rebinding is used:
(a) 1 // Is not '2' because 'a' is never changed
(b) 1 // Is not '3' because 'a' is never changed
>
> Huh. IANAOU* but this seems surprising to me. I would expect this not
> to rebind the reference. Had I wanted that behavior, I would have
> used an int*
Would you be able to use int* then you probably should.
optional<int> is intended to allow you to express an absent 'int' without
resorting to a pointer.
(and please!, this doesn't mean at all that optional is a pointer... both
optional<> and pointers are models of a more fundamental concept:
OptionalPointee or Nullable)
Best
-- Fernando Cacciola SciSoft http://fcacciola.50webs.com/
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk