【问题标题】:Operator overloading in C++ and the ampersand [duplicate]C ++中的运算符重载和与号[重复]
【发布时间】:2012-09-23 08:32:41
【问题描述】:

可能重复:
What's the ampersand for when used after class name like ostream& operator <<(…)?

我是 C++ 新手,我可能有一个非常愚蠢的问题。我见过这样的事情:

Vector3f & operator = (Vector3f & obj)
{
    _item[0] = obj[0];
    _item[1] = obj[1];
    _item[2] = obj[2];

    return *this;
}

我想知道为什么在 Vector3f 之后有一个 & 符号。它在做什么魔法?我在任何地方都找不到任何解释。最重要的是,上面的东西和有什么区别

Vector3f operator = (Vector3f obj)
{
    _item[0] = obj[0];
    _item[1] = obj[1];
    _item[2] = obj[2];

    return *this;
}

【问题讨论】:

    标签: c++ class operator-overloading


    【解决方案1】:

    这是 C++ 的按引用传递和按引用返回的语法。它只是意味着该参数是调用上下文中对象的别名,而不是副本,并且类似地,返回的对象实际上是*this,而不是副本。

    【讨论】:

    • 这就像传递一个指向对象的指针一样吗?那么为什么他们不传递指针而不是引用呢?
    • @MartinMarinov 因为它是 C++ 而不是 C。参考提供了不同的语法和语义。如果您不知道它们是什么,我建议您阅读一本很好的 C++ 入门书籍。
    【解决方案2】:

    第一个通过引用获取Vector3f,并通过引用返回Vec3torf。第二个按值获取和返回(即语义上它会复制参数以及*this)。

    【讨论】:

      猜你喜欢
      • 2017-10-14
      • 1970-01-01
      • 2011-10-27
      • 2016-06-27
      • 1970-01-01
      • 2012-12-22
      • 2016-09-26
      • 2012-04-21
      • 1970-01-01
      相关资源
      最近更新 更多