可以(a == 1)&&(a == 2)&&(a == 3)评估为真?(它有用吗?)

mat*_*ler 2 c++ operator-overloading

受到另一个关于java脚本语言的问题的启发.可以表达

 (a==1)&&(a==2)&&(a==3)
Run Code Online (Sandbox Code Playgroud)

在C++中评估为true?(如果是的话,它真的有用吗?)

Som*_*ken 10

是的,它可以:

class Foo
{
    public:
    bool operator==(int a)
    {
        return true;
    }
};
Run Code Online (Sandbox Code Playgroud)

然后,让我们a的类型Foo和瞧.

这真的有用吗?我真的没有看到它有用.


Edg*_*jān 5

表达式可以在C++中评估为true吗?

是的,没有什么不可能......

struct A {
    int x = 0;
};

bool operator==(A& a, int num) {
    return ++a.x == num;
}
Run Code Online (Sandbox Code Playgroud)

然后:

if ((a == 1) && (a == 2) && (a == 3)) {
    std::cout << "meow" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

打印meow.

但是我不知道这种奇怪的重载的任何实际用法,并且希望永远不会在生产中看到这样的代码.

  • "是的,没有什么是不可能的......" - 你有没有尝试过将牙膏放回管中? (3认同)
  • @EdHeal你可以将牙膏(一点点)吸回到管子边缘的管子里...... (2认同)