小编use*_*449的帖子

懒惰,重载C++ &&运算符?

我正在尝试实现自己的布尔类,但不能复制&&的本机语义.以下设计的代码演示了这个问题:



    #include <iostream>>

    class MyBool {
    public:
        bool theValue;
        MyBool() {}
        MyBool(bool aBool) {theValue = aBool;}
        MyBool operator&& (MyBool aBool) {return theValue && aBool.theValue;}
    };

    bool f1() {std::cout << "   First\n"; return false;}
    bool f2() {std::cout << "   Second\n"; return false;}

    int main(int argc, char** argv) {
        std::cout << "Native &&\n";
        f1() && f2();
        std::cout << "Overloaded &&\n";
        MyBool(f1()) && MyBool(f2());
        return 0;
}

Run Code Online (Sandbox Code Playgroud)

编译和运行时,结果是:


    Native &&
       First
    Overloaded &&
       Second
       First

换句话说,&& on bools是懒惰的(正如任何C++程序员所期望的那样)但是重载的&&不是(正如这个C++程序员至少没想到的那样).

有没有办法让重载&&懒惰?我可以找到各种全面的延迟评估方案来提供类似Haskell的功能,但它们看起来像我的用例完全矫枉过正.

c++ boolean lazy-evaluation operator-keyword

8
推荐指数
2
解决办法
3001
查看次数

标签 统计

boolean ×1

c++ ×1

lazy-evaluation ×1

operator-keyword ×1