gpt4 book ai didi

operator-overloading - D 是否自动将 opBinary 重写为 opOpAssign?

转载 作者:行者123 更新时间:2023-12-01 11:30:44 24 4
gpt4 key购买 nike

例如,假设 T 实现了正确的运算符重载:

T t1, t2, t3;
t3 = t1 + t2; // t3.opAssign(t1.opBinary!"+"(t2)) for sure
t3 = t3 + t2; // rewritten to t3.opOpAssign!"+"(t2) ?

最后一个操作是不是被D优化了?

最佳答案

不,不是。这是不可能的,因为 opBinaryopOpAssign 可能有不同的语义:

struct S
{
int val = 5;

S opBinary(string op)(S rhs) if (op == "+")
{
return S(val + rhs.val);
}

void opOpAssign(string op)(S rhs) if (op == "+")
{
val = val - rhs.val;
}
}

void main()
{
import std.stdio;

S s1, s2, s3;
writeln(s3); // S(5)

s3 = s3 + s2;
writeln(s3); // S(10)

s3.val = 5;
writeln(s3); // S(5)

s3 += s2;
writeln(s3); // S(0)
}

关于operator-overloading - D 是否自动将 opBinary 重写为 opOpAssign?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32306692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com