请解释这个似乎不完整或缺乏作业的C++语法?

lin*_*asy 4 c++ syntax overloading operators

reply_form::reply_form()
{
    using cppcms::locale::translate;
    author.message(translate("Author"));
    comment.message(translate("Comment"));
    send.value(translate("Send"));
    *this + author + comment + send;
    author.limits(1,64);
    comment.limits(1,256);
}
Run Code Online (Sandbox Code Playgroud)

在给定的构造函数定义中,有人请解释此语法的含义或其预期用途和好处:

*this + author + comment + send;
Run Code Online (Sandbox Code Playgroud)

对我而言,似乎是在没有将其分配给任何东西的情况下进行连接/添加,这真的让我感到困惑,因为我无法理解其目的.

我已经在网上搜索了这个问题,但可能,我没有使用正确的术语来搜索它,因为我不知道究竟是什么类型的语法被称为.

我觉得它是最新的C++ 1x功能的一部分,但不确定,所以无法找到适合它的书.最后选择stackoverflow进行救援:-)

编辑:

我能提供的最相关的是它在头文件中的声明,它是:

struct reply_form : public cppcms::form {
    cppcms::widgets::text author;
    cppcms::widgets::textarea comment;
    cppcms::widgets::submit send;
    reply_form();
};
Run Code Online (Sandbox Code Playgroud)

EDIT2:Revision2(检查评论后再次更正)

好的,我能够追溯操作符+事物,并找出它被重载的方式:

    inline form &operator + (form &f)
    {
        add(f);
        return *this;
    }
Run Code Online (Sandbox Code Playgroud)

所以这是运算符重载的情况.感谢您的回答.我最近已经迁移到C++并且发现了一些奇怪的东西,就像我在这个帖子中发布的那样: 用C++解释空白类函数,这在我看来是具有空白体的多功能列表,但后来我把它理解为语法和方法声明变量或调用基类构造函数.

感谢您的回答,这真的很有帮助,非常快!

Lig*_*ica 9

由于我们不知道是什么reply_form,这个问题在完成时无法回答.你的问题更多的是关于程序而不是关于C++.

如果有副作用,该行*this + author + comment + send; 可能reply_form::operator+副作用.

但是,传统上它不会(因为它没有直观意义,正如你所发现的那样).所以,要么这是班级设计中的错误,要么线条应该是这样的*this += author + comment + send;.


Rem*_*anu 5

最有可能是一个流利的运算符被覆盖,以便为a添加字段reply_form.例如.

reply_form& reply_form::operator+ (const field& value)
{
    this->add_field (value);
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

  • 没有人在他理智的脑海里写了一个变异的`运算符+`,这就是`operator + =`的意思. (8认同)
  • PS.这将是一个令人震惊的设计. (4认同)
  • :)它仍然可以非常强大,有效且_intuitive_.它只需要正确使用,就像其他一切一样. (3认同)
  • @Remus:这与运算符重载无关.这只是糟糕的设计......'你是什么意思DrawCicle()调用FireMissile()?' (2认同)