用于运算符重载的Lambda表达式

Bar*_*ani 3 c++ visual-studio

是否可以为重载运算符编写lambda表达式?

例如,我有以下结构:

struct X{
    int value;
    //(I can't modify this structure)
};
Run Code Online (Sandbox Code Playgroud)

X需要==运营商

int main()
{
    X a = { 123 };
    X b = { 123 };
    //[define equality operator for X inside main function]
    //if(a == b) {}
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

==运算符可以定义为bool operator==(const X& lhs, const X& rhs){...},但这需要添加单独的函数,并且我的比较仅在特定函数内有效.

auto compare = [](const X& lhs, const X& rhs){...}将解决问题.我想知道我是否可以将这个lambda编写为运算符.

R S*_*ahu 5

是否可以为重载运算符编写lambda表达式?

没有.

操作员过载功能必须是功能或功能模板.它们可以是成员函数,成员函数模板,非成员函数或非成员函数模板.但是,它们不能是lambda表达式.

C++ 11 Standard/13.5重载运算符,第6段:

运算符函数应该是非静态成员函数或者是非成员函数,并且至少有一个参数,其类型是类,对类的引用,枚举或对枚举的引用.