[GiNaC-list] list of list
Jerome BENOIT
jgmbenoit at mailsnare.net
Sun Feb 4 19:36:03 CET 2007
Hello,
thanks for the reply.
Actually I use list of lists to perform quick test.
A last question:
is there any king of NULL (as in Maple) object in GiNaC ?
Thanks in advance,
Jerome
Sheplyakov Alexei wrote:
> Hello,
>
> On Sun, Feb 04, 2007 at 02:19:42AM +0800, Jerome BENOIT wrote:
>> I have just noticed that:
>>
>> lst list;
>> list = lst(lst(1,1),lst(2,4),lst(3,9));
>>
>> gives a list of list as expected,
>> whereas
>>
>> lst list;
>> list = lst(1,1),lst(2,4),lst(3,9);
>
> Probably you want this:
>
> list = ex(lst(1, 1)), lst(2, 4), lst(3,9);
>
>> gives the first list (namely lst(1,1))
>
> Not exactly, your code gives lst(1, 1) as opposed to lst(lst(1, 1)).
>
>> is it a bug ?
>
> No. This is how C++ function overload resolution works. There are several
> overloaded instances of operator= in the lst class:
>
> lst& operator=(const lst&);
> container_init<ex, std::list> operator=(const ex&);
>
> First one gives the best match (no type conversion form lst
> to ex is necessary), so your code basically reads as:
>
> class foo {
> int i;
> public:
> foo();
> foo(int i_);
> foo& operator=(const foo& o);
> };
>
> void demo() {
> // lst list;
> foo a;
> // list = lst(1, 1), lst(2, 4), lst(3, 9);
> a = foo(1), foo(2), foo(3);
> }
>
> foo::foo() { i = 0; }
> foo::foo(int i_) { i = i_; }
> foo& foo::operator=(const foo& o) {
> if (&o != this)
> i = o.i;
> return *this;
> }
>
>> or is it a wrong thing to do ?
>
> There is nothing wrong about list of lists. But the code operating on
> such lists will be [probably] somewhat inefficient.
>
> Best regards,
> Alexei
>
--
Jerome BENOIT
jgmbenoit_at_mailsnare_dot_net
More information about the GiNaC-list
mailing list