operator bool()是什么


operator bool()是什么

在C++中,operator TypeName()語法用來將對象轉換為指定的TypeName類型,當這里TypeNamebool時,就可以直接在條件判斷式里面直接用該對象:

#include <iostream>

class Foo {
public:
    operator bool() const {
        return true;
    }
};

int main(int argc, const char* argv[]) {
    Foo foo;
    if (foo) {
        std::cout << "true" << std::endl;
    }

    return 0;
}

問題

operator bool()語法會遇到一些問題,比如隱式類型轉換,還有相等測試無法檢測書寫錯誤:

#include <iostream>

class Foo {
public:
    operator bool() const {
        return true;
    }
};

int main(int argc, const char* argv[]) {
    Foo foo1;
    Foo foo2;
    // 這里==寫成了=,但編譯不會報錯
    if (foo1 = foo2) {
        std::cout << "true" << std::endl;
    }

    // 這里的隱式類型轉換一般沒有意義
    bool flag = foo1;

    return 0;
}

隱式類型轉換的問題可以在定義的時候加上explicit解決,和構造函數中的一樣,賦值的時候只有顯式類型轉換才可以編譯:

#include <iostream>

class Foo {
public:
    // 加上explicit關鍵字
    explicit operator bool() const {
        return true;
    }
};

int main(int argc, const char* argv[]) {
    Foo foo1;
    Foo foo2;
    // 這里==寫成了=,但編譯不會報錯
    if (foo1 = foo2) {
        std::cout << "true" << std::endl;
    }

    // 隱式類型轉換,編譯錯誤
    bool flag = foo1;

    return 0;
}

建議

個人還是覺得盡量不要用這種語法,還是像java那樣寫出特定名字的判斷函數最好。C++也真是,搞這些復雜的語法太多了,反而影響語言使用者學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM