0

我对 cli/c++ 环境中的运算符重载有疑问

static Length^ operator++(Length^ len)
{
   Length^ temp = gcnew Length(len->feet, len->inches);
   ++temp->inches;
   temp->feet += temp->inches/temp->inchesPerFoot;
   temp->inches %= temp->inchesPerFoot;
   return temp;
}

(代码来自ivor horton的书。)

为什么我们需要在堆上声明一个新的类对象(temp)只是为了返回它?我用谷歌搜索了关于超载的信息,但那里真的不多,我觉得有点失落。

4

2 回答 2

1

是的,因为您在这里重载了POST -increment 运算符。因此,尽管存在新值,但原始值可能会在代码中大量使用、复制并存储在其他地方。例子:

store_length_somewhere( len++ );

虽然len将增加,但原始值可能由函数存储在其他地方。这意味着您可能同时需要两个不同的值。因此,新价值的创造和回报。

于 2011-08-28T05:24:29.237 回答
1

这是在 .NET 中实现运算符重载的方式。重载运算符是静态函数,它返回一个新实例,而不是更改当前实例。因此,post 和 prefix ++ 运算符是相同的。大多数关于运算符重载的信息都是关于本机 C++ 的。您可以查看 .NET 特定信息,查找 C# 示例,例如:http: //msdn.microsoft.com/en-us/library/aa288467 (v=vs.71).aspx .NET GC 允许创建一个许多轻量级的新实例,它们是自动收集的。这就是 .NET 重载运算符比原生 C++ 更简单的原因。

于 2011-08-28T05:33:07.043 回答