C ++“+”(加号)在类实例前面签名

时间:2018-04-17 04:42:54

标签: c++ c++17

Helllo, 我正在阅读Mach7中的以下代码(看起来很棒,我想知道为什么c ++ 17没有采用它,但这不是主题......)

bool operator==(const Term& left, const Term& right)
{
    //std::clog << "(" << left << ',' << right << ')' << std::endl;
    var<std::string> s;
    //var<const Var&>  v;
    var<const Term&> v,t,f;

    Match(left,right)
    {
    Case(C<Var>(s),     C<Var>(+s)     ) return true;
    Case(C<Abs>(&v,&t), C<Abs>(&+v,&+t)) return true;
    Case(C<App>(&f,&t), C<App>(&+f,&+t)) return true;
    Otherwise()                          return false;
    }
    EndMatch

    return false; // To prevent all control path warning
}

(见here

“+ s”在第二场比赛中意味着什么?在语义上它应该意味着“通过调用构造函数来制作另一个像s”,但我从未见过这种语法。

1 个答案:

答案 0 :(得分:4)

在探索之后(由于没有该类型的类实现unary operator +,我很惊讶地发现)他们似乎创建了一个unary +运算符,它们包含equivalence.hpp

TL; DR,它们在全局命名空间中具有以下内容:

template <typename T>
inline auto operator+(T&& t) noexcept { return true; }

除了他们实际做了些什么。 :)