RE:const& arguments

From: Masaharu Goto (MXJ02154@nifty.ne.jp)
Date: Mon Mar 08 1999 - 14:16:16 MET


David,

Thank you for the message. Probably, I overlooked.

This is a CINT bug. If you pass numerical expression to reference argument,
you may see this kind of problem. If the type is int&, long&, double& it
sometimes work though.

For now, I fixed the exact case that you have reported.  While I know
my fix is not perfect and needs to be further improved in the future.

Masaharu Goto


---------------------------------------------------------------------
Hi all,

This is one that Kyle Pope brought to my attention the other day.  I hunted
though the web site and the archives of the mailing list but I didn't see
anything about this.  Anyway, it seems that root (2.21/05 at least) is
inconsistent in its handling of `const&' arguments.  These are pretty common i
n
setter methods, so I'd guess that others must have run across this too.  To se
e
what I mean, load the following classes into root:

class a {
 public:
  void SetA(const Int_t& i) {fA = i;}
  void SetX(const Float_t& z) {fX = z;}
  Int_t A() {return fA;}
  Float_t X() {return fX;}
 private:
  Int_t fA;
  Float_t fX;
};

class b {
 public:
  void SetA(const Int_t i) {fA = i;}
  void SetX(const Float_t z) {fX = z;}
  Int_t A() {return fA;}
  Float_t X() {return fX;}
 private:
  Int_t fA;
  Float_t fX;
};

They only differ in that class `a' uses const& while class `b' just uses
`const'.  Next, run the following macro:

{
a a1;
a1.SetA(1);
a1.SetX(2.0);

b b1;
b1.SetA(1);
b1.SetX(2.0);

printf("a1.A() should be 1  : %d\n", a1.A());
printf("a1.X() should be 2.0: %f\n", a1.X());

printf("b1.A() should be 1  : %d\n", b1.A());
printf("b1.X() should be 2.0: %f\n", b1.X());
}

and you should see

root [0] .L a.h   
root [1] .L b.h   
root [2] .x test.C
a1.A() should be 1  : 1
a1.X() should be 2.0: 0.000000
b1.A() should be 1  : 1
b1.X() should be 2.0: 2.000000
root [3] 

For some reason, `const Float_t&' doesn't seem to work properly while each of
`const Float_t' and `const Int_t' and even `const Int_t&' seems to work OK.  H
asanyone else seen this behavior?
 
Cheers,
Dave

--
David Morrison  Brookhaven National Laboratory  phone: 516-344-5840
                Physics Department, Bldg 510 C    fax: 516-344-3253
                  Upton, NY 11973-5000  email: dave@bnl.gov



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:30 MET