Re: Initialisation of reference vs. initialisation of reference member
shailesh wrote:
I tried running this:
unsigned const int& n = 3;
cout << n << endl;
cout << &n << endl;
Output is:
3
0012FEC8
During debugging I can see that memory location 0012FEC8 has the value
3 stored.
This is on VC++ 2003 compiler.
So this answers question 1.
2:
About the error you saw, MSDN says this:
'reference' : initialization of reference member requires a temporary
variable
A constructor initializes a reference to a member instead of
initializing the member.
It is invalid to initialize a reference member of a class in the
class's constructor with a temporary variable. An attempt to do so
generates the C2354 error, as illustrated by this sample code:
// C2354.cpp
int temp() { return 1; }
class Test
{
public:
int member;
int& ref_member;
Test();
};
Test::Test() : ref_member( temp() )
{ // C2354
}
When this error is encountered, the solution is to change the code so
that the reference member is not initialized to a temporary variable.
The reference must be initialized to an object that will exist for the
lifetime of the reference member.
------------------------------------------------------------------------------------
So it seems that the 2 in the constructor call is being treated as a
temporary variable. and not as something in the global memory.
Hi shailesh,
That's very interesting but the Microsoft compiler error that I saw was '
initialization of
reference member requires a temporary variable'. This is quite the opposite
of what the MSDN article says (reference member must NOT be initialised to a
temporary).
I'm a little more confused now :-(