C++三元表達式詳情

if-else語句非常常用,但在進行一些簡單邏輯判斷的時候,會顯得有些不太簡潔。特別是在初始化的時候,比如我們有一個變量,某種情況下賦值成a,另外的情況下賦值成b。

使用if-else語句寫出來就是:

int cur;
if (condition) {
    cur = a;
}else {
    cur = b;
}

這當然是沒問題的,隻是在大量使用的時候會顯得有些繁瑣。因此C++當中推出瞭三元表達式對此進行簡化,三元表達式也被稱為條件運算符(?:)。

運算符的通用格式如下:

condition ? expression1 : expression2;

問號之前的condition表示一個邏輯運算,如果結果為true,返回expression1的值,否則返回expression2的值。

使用三元表達式之後,剛才上述的代碼可以改寫成:

int cur = condition ? a : b;

這樣我們就把6行代碼壓縮成瞭一行,簡化瞭代碼,但也因此瞭增加瞭代碼閱讀的難度。因此隻推薦在簡單邏輯判斷下使用三元表達式,也不推薦嵌套使用,會使得代碼非常難以閱讀。

最後分享一個我個人特別喜歡的使用三元表達式的場景,就是結構體排序的cmp函數。

比如我們有這樣一個場景,需要使用一個結構體存儲兩個值x和y,代表一個坐標。我們需要對坐標進行排序,排序的規則是x軸小的在前,如果x軸相等,則y小的在前。

struct P {
    int x, y;
};

P arr[1000];

大傢都知道,要對這樣的結構體排序,一種做法是我們可以額外實現一個cmp函數作為sort排序函數的傳參。如果不使用三元表達式,

那麼cmp函數是這樣的:

bool cmp(const P &a, const P &b) {
    if (a.x == b.x) {
        return a.y < b.y;
    }else {
        return a.x < b.x;
    }
}

使用三元表達式的話,整個邏輯隻有一行:

bool cmp(const P& a, const P& b) {
    return a.x == b.x ? a.y < b.y : a.x < b.x;
}

到此這篇關於C++三元表達式詳情的文章就介紹到這瞭,更多相關C++三元表達式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

 文章轉自:公眾號:Coder梁(ID:Coder_LT)

推薦閱讀: