the behavior of opAssign

Sobaya sobaya007 at gmail.com
Mon Jan 29 19:34:52 UTC 2018


On Monday, 29 January 2018 at 10:06:23 UTC, Simen Kjærås wrote:
> On Monday, 29 January 2018 at 09:23:55 UTC, Sobaya wrote:
>> I found a strange behavior.
>>
>> class A {
>>     void opAssign(int v) {}
>> }
>>
>> class Test {
>>     A a;
>>     this() {
>>         a = new A(); // removing this causes compile error.
>>         a = 3; // cannot implicitly convert expression `3` of 
>> `int` to `A`
>>     }
>> }
>>
>> void main() {
>>     // this is allowed.
>>     A a;
>>     a = 3;
>> }
>
> The first assignment in the constructor isn't actually a call 
> to opAssign, it's a constructor call. In the same way, this 
> will not compile:
>
> A a = 3;
>
> Also, since classes are reference types, you will need to 
> construct an instance before assigning an int to it. The code 
> in your main() will crash at runtime because the 'this' 
> reference is null inside opAssign.
>
> --
>   Simen

I have not read https://dlang.org/spec/class.html
In 15.9, there is an explanation about it.
Sorry.

--
   Sobaya


More information about the Digitalmars-d-learn mailing list