91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++邏輯操作符怎么使用

發布時間:2022-06-01 10:59:50 來源:億速云 閱讀:152 作者:iii 欄目:開發技術

本篇內容主要講解“C++邏輯操作符怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++邏輯操作符怎么使用”吧!

一、邏輯運算符的原生語義

  1. 操作數只有兩種值( true和 false )邏

  2. 輯表達式不用完全計算就能確定最終值

  3. 最終結果只能是 true 或者 false

下面看一個邏輯表達式的代碼:

#include <iostream>
#include <string>
using namespace std;
int func(int i)
{
    cout << "int func(int i): i = " << i << endl;
    return i;
}
int main()
{
    if (func(0) && func(1))
    {
        cout << "Result is true!" << endl;
    }
    else 
    {
        cout << "Result is False!" << endl;
    }
    cout << endl;
    if (func(0) || func(1))
    {
        cout << "Result is true!" << endl;
    }
    else 
    {
        cout << "Result is False!" << endl;
    } 
    return 0;
}

輸出結果如下:

C++邏輯操作符怎么使用

這就是邏輯操作符的短路規則,可以參照我之前寫的詳細講解邏輯運算符的使用

二、重載邏輯操作符

邏輯操作符可以重載嗎?重載邏輯操作符有什么意義?

下面看一個重載邏輯操作符示例:

#include <iostream>
using namespace std;
class Test
{
    int mValue;
public:
    Test(int v)
    {
        mValue = v;
    }
    int value() const
    {
        return mValue;
    }
};
bool operator &&(const Test& l, const Test& r)
{
    return l.value() && r.value();
}
bool operator ||(const Test& l, const Test& r)
{
    return l.value() || r.value();
}
Test func(Test i)
{
    cout << "Test func(Test i): i.value() = " << i.value() << endl;
    return i;
}
int main()
{
    Test t0(0);
    Test t1(1);
    if (func(t0) && func(t1))
    {
        cout << "Result is true!" << endl;
    }
    else
    {
        cout << "Result is false!" << endl;
    }
    cout << endl;
    if (func(t0) || func(t1))
    {
        cout << "Result is true!" << endl;
    }
    else
    {
        cout << "Result is false!" << endl;
    }
}

輸出結果如下:

C++邏輯操作符怎么使用

按照短路法則,func(t0) && func(t1) 應該只執行 func(t0),這里卻輸出了func(t0) 和 func(t1) 運行后的值,這是為什么呢?且看下面解析。

問題的本質分析

  1. C++ 通過函數調用擴展操作符的功能

  2. 進入函數體前必須完成所有參數的計算

  3. 函數參數的計算次序是不定的

  4. 短路法則完全失效

邏輯操作符重載后無法完全實現原生的語義。

上述代碼等效寫法如下:

#include <iostream>
using namespace std;
class Test
{
    int mValue;
public:
    Test(int v)
    {
        mValue = v;
    }
    int value() const
    {
        return mValue;
    }
};
bool operator &&(const Test& l, const Test& r)
{
    return l.value() && r.value();
}
bool operator ||(const Test& l, const Test& r)
{
    return l.value() || r.value();
}
Test func(Test i)
{
    cout << "Test func(Test i): i.value() = " << i.value() << endl;
    return i;
}
int main()
{
    Test t0(0);
    Test t1(1);
    if (operator && (func(t0), func(t1)))
    {
        cout << "Result is true!" << endl;
    }
    else
    {
        cout << "Result is false!" << endl;
    }
    cout << endl;
    if (operator || (func(t0), func(t1)))
    {
        cout << "Result is true!" << endl;
    }
    else
    {
        cout << "Result is false!" << endl;
    }
}

輸出結果和上面一樣:

C++邏輯操作符怎么使用

將func(t0) && func(t1) 改寫成operator && (func(t0), func(t1)),就不難理解為什么了。核心就兩點:

1.進入函數體前必須完成所有參數的計算

2.函數參數的計算次序是不定的

一些有用的建議

  • 實際工程開發中避免重載邏輯操作符

  • 通過重載比較操作符代替邏輯操作符重載

  • 直接使用成員函數代替邏輯操作符重載

  • 使用全局函數對邏輯操作符進行重載

到此,相信大家對“C++邏輯操作符怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

东辽县| 隆尧县| 石景山区| 兴文县| 兴安盟| 舞阳县| 沙田区| 安新县| 平遥县| 海林市| 杭州市| 亳州市| 本溪| 那坡县| 安化县| 阿城市| 古浪县| 濉溪县| 东丽区| 平度市| 文山县| 宁晋县| 莱阳市| 江口县| 巧家县| 娱乐| 石渠县| 循化| 德保县| 南木林县| 石嘴山市| 乌兰县| 冕宁县| 田东县| 清丰县| 宜黄县| 永丰县| 嘉鱼县| 汽车| 六安市| 盈江县|