digitalmars.D.learn - What's opIndexAssign supposed to return ?
- wjoe (13/13) Feb 25 2020 Lets say I've got 3 overloads of opIndexAssign:
- Petar Kirov [ZombineDev] (16/29) Feb 25 2020 opIndexAssign is the operator used in the following code:
- wjoe (3/20) Feb 25 2020 Excellent answer ! Thanks for your fast reply :)
- =?UTF-8?Q?Ali_=c3=87ehreli?= (11/14) Feb 25 2020 I have examples for non-templatized and templatized versions of
- wjoe (3/16) Feb 25 2020 This is great! Thank you. Curious why this wasn't found by my
Lets say I've got 3 overloads of opIndexAssign: auto opIndexAssign(T t); auto opIndexAssign(T t, size_t i); and auto opIndexAssign(T t, size_t[2] i); I would assume to return what I would return with opIndex but I'd rather not act upon assumptions. But if yes is it supposed to be the newly assigned values or the pre-assignment ones ? By value or by reference ? And if it's the new stuff can I just return t ? The language manual on operator overloading didn't answer that question and neither did an internet search which didn't find any useful information. Something unrelated and a heads up about introducing opIndexAssign from 2004.
Feb 25 2020
On Tuesday, 25 February 2020 at 11:02:40 UTC, wjoe wrote:Lets say I've got 3 overloads of opIndexAssign: auto opIndexAssign(T t); auto opIndexAssign(T t, size_t i); and auto opIndexAssign(T t, size_t[2] i); I would assume to return what I would return with opIndex but I'd rather not act upon assumptions. But if yes is it supposed to be the newly assigned values or the pre-assignment ones ? By value or by reference ? And if it's the new stuff can I just return t ? The language manual on operator overloading didn't answer that question and neither did an internet search which didn't find any useful information. Something unrelated and a heads up about introducing opIndexAssign from 2004.opIndexAssign is the operator used in the following code: arr[1] = 8; It returns the element at index 1 (so 8 in this case) by reference. This allows you to do: (arr[1] = 8)++; assert(arr[1] == 9); Whether or not you want to support this behavior in your custom data structure is up to you. It's perfectly valid to return the element by value or even return void. Returning void from any custom assignment operator is always a safe choice. It's possible that some algorithms (e.g. in Phobos or third-party libraries) may need op*Assign to return something, but in that unlikely case you'll get a compile-time error, so it will be an easy fix.
Feb 25 2020
On Tuesday, 25 February 2020 at 11:49:50 UTC, Petar Kirov [ZombineDev] wrote:On Tuesday, 25 February 2020 at 11:02:40 UTC, wjoe wrote:Excellent answer ! Thanks for your fast reply :)[...]opIndexAssign is the operator used in the following code: arr[1] = 8; It returns the element at index 1 (so 8 in this case) by reference. This allows you to do: (arr[1] = 8)++; assert(arr[1] == 9); Whether or not you want to support this behavior in your custom data structure is up to you. It's perfectly valid to return the element by value or even return void. Returning void from any custom assignment operator is always a safe choice. It's possible that some algorithms (e.g. in Phobos or third-party libraries) may need op*Assign to return something, but in that unlikely case you'll get a compile-time error, so it will be an easy fix.
Feb 25 2020
On 2/25/20 3:02 AM, wjoe wrote:> Lets say I've got 3 overloads of opIndexAssign:auto opIndexAssign(T t);an internet search which didn't find any useful information.I have examples for non-templatized and templatized versions of opIndexAssign here: http://ddili.org/ders/d.en/operator_overloading.html#ix_operator_overloading.opIndexAssign http://ddili.org/ders/d.en/templates_more.html#ix_templates_more.opIndexAssign%20template I used this index to find those: http://ddili.org/ders/d.en/ix.html Ali
Feb 25 2020
On Tuesday, 25 February 2020 at 15:30:19 UTC, Ali Çehreli wrote:On 2/25/20 3:02 AM, wjoe wrote:> Lets say I've got 3 overloads of opIndexAssign:This is great! Thank you. Curious why this wasn't found by my internet search.auto opIndexAssign(T t);an internet search which didn't find any useful information.I have examples for non-templatized and templatized versions of opIndexAssign here: http://ddili.org/ders/d.en/operator_overloading.html#ix_operator_overloading.opIndexAssign http://ddili.org/ders/d.en/templates_more.html#ix_templates_more.opIndexAssign%20template I used this index to find those: http://ddili.org/ders/d.en/ix.html Ali
Feb 25 2020