簡體   English   中英

c ++中的兩個比較運算符,如python

[英]Two comparison operators in c++ like python

比較5 > x > 1適用於C ++,就像在python中一樣。 它沒有顯示任何編譯錯誤,但似乎也不起作用。

在C ++中, 5 > x > 1被分組為(5 > x) > 1

(5 > x)falsetrue ,因此它永遠不會大於1,因為falsetrue分別轉換為01 於是

5 > x > 1

對於x任何值,在C ++中都是false 所以在C ++中你需要用更長的形式編寫你真正想要的表達式

x > 1 && x < 5

我從不滿足於你不能選擇......所以理論上你可以像這樣重載運算符(只是一個草圖,但我想你會明白這一點):

#include <iostream>

template <class T>
struct TwoWayComparison {
    T value;
    bool cond = true;

    friend TwoWayComparison operator >(const T& lhs, const TwoWayComparison& rhs) {
        return {rhs.value, lhs > rhs.value};
    }
    friend TwoWayComparison operator >(const TwoWayComparison& lhs, const T& rhs) {
        return {rhs, lhs.cond && lhs.value > rhs};
    }
    operator bool() {
        return cond;
    }
};

int main() {
    TwoWayComparison<int> x{3};
    if (15 > x > 1) {
        std::cout << "abc" << std::endl;
    }
}

[現場演示]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM