最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++超詳細(xì)講解邏輯操作符

 更新時間:2022年06月01日 08:39:16   作者:清風(fēng)自在?流水潺潺  
在C語言中,邏輯運(yùn)算符有&&、||、!;&&表示“與”的意思,需要兩端的表達(dá)式的值都為true,該式的值才為true。||表示“或”的意思,兩端的表達(dá)式的值只要有一端為true,該式的值就為true。!表示“非”的意思,將該式的真值換成相反的真值,即false和true互換

一、邏輯運(yùn)算符的原生語義

  1. 操作數(shù)只有兩種值( true和 false )邏
  2. 輯表達(dá)式不用完全計算就能確定最終值
  3. 最終結(jié)果只能是 true 或者 false

下面看一個邏輯表達(dá)式的代碼:

#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;
}

輸出結(jié)果如下:

這就是邏輯操作符的短路規(guī)則,可以參照我之前寫的詳細(xì)講解邏輯運(yùn)算符的使用

二、重載邏輯操作符

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

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

#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;
    }
}

輸出結(jié)果如下:

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

問題的本質(zhì)分析

  1. C++ 通過函數(shù)調(diào)用擴(kuò)展操作符的功能
  2. 進(jìn)入函數(shù)體前必須完成所有參數(shù)的計算
  3. 函數(shù)參數(shù)的計算次序是不定的
  4. 短路法則完全失效

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

上述代碼等效寫法如下:

#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;
    }
}

輸出結(jié)果和上面一樣:

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

1.進(jìn)入函數(shù)體前必須完成所有參數(shù)的計算

2.函數(shù)參數(shù)的計算次序是不定的

一些有用的建議

  • 實際工程開發(fā)中避免重載邏輯操作符
  • 通過重載比較操作符代替邏輯操作符重載
  • 直接使用成員函數(shù)代替邏輯操作符重載
  • 使用全局函數(shù)對邏輯操作符進(jìn)行重載

三、小結(jié)

  • C++ 從語法上支持邏輯操作符重載
  • 重載后的邏輯操作符不滿足短路法則
  • 工程開發(fā)中不要重載邏輯操作符
  • 通過重載比較操作符替換邏輯操作符重載
  • 通過專用成員函數(shù)替換邏輯操作符重載

到此這篇關(guān)于C++超詳細(xì)講解邏輯操作符的文章就介紹到這了,更多相關(guān)C++邏輯操作符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++第11版本中的一些強(qiáng)大的新特性小結(jié)

    C++第11版本中的一些強(qiáng)大的新特性小結(jié)

    這篇文章主要介紹了C++第11版本中的一些強(qiáng)大的新特性小結(jié),需要的朋友可以參考下
    2015-12-12
  • C語言實現(xiàn)萬年歷

    C語言實現(xiàn)萬年歷

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)萬年歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 關(guān)于大小端、位域的一些概念詳解

    關(guān)于大小端、位域的一些概念詳解

    我們常用的x86結(jié)構(gòu)都是小端模式,而大部分DSP,ARM也是小端模式,不過有些ARM是可以選擇大小端模式。所以對于上面的maxHeight是應(yīng)該以小端模式來存放,具體情況請看下面兩表
    2013-10-10
  • C++ 回調(diào)接口設(shè)計和二進(jìn)制兼容詳細(xì)

    C++ 回調(diào)接口設(shè)計和二進(jìn)制兼容詳細(xì)

    再開發(fā)視頻編輯 SDK,SDK的回調(diào)接口設(shè)計成 C 風(fēng)格,結(jié)構(gòu)中放著一些函數(shù)指針,既然對外接口是 C++,為什么不直接使用 C++ 的虛函數(shù)?這篇文章便對這一問題做個詳細(xì)介紹,需要的朋友可以參考一下
    2021-09-09
  • C++如何實現(xiàn)BCD碼和ASCII碼的相互轉(zhuǎn)換

    C++如何實現(xiàn)BCD碼和ASCII碼的相互轉(zhuǎn)換

    這篇文章主要介紹了C++實現(xiàn)BCD碼和ASCII碼互轉(zhuǎn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Matlab實現(xiàn)將圖像序列合并為視頻的方法詳解

    Matlab實現(xiàn)將圖像序列合并為視頻的方法詳解

    MATLAB是一種高性能語言,用于操縱矩陣、執(zhí)行技術(shù)計算、繪圖等。它代表矩陣實驗室。借助這個軟件,我們可以從圖像中創(chuàng)建視頻。這篇文章主要介紹了Matlab實現(xiàn)將圖像序列合并為視頻的四個方法,希望對大家有所幫助
    2023-03-03
  • C語言版醫(yī)院管理系統(tǒng)

    C語言版醫(yī)院管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言版醫(yī)院管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 淺談關(guān)于C語言中#define的副作用

    淺談關(guān)于C語言中#define的副作用

    這篇文章主要介紹了關(guān)于C語言中#define的副作用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C++面向?qū)ο笳Z言自制多級菜單功能實現(xiàn)代碼

    C++面向?qū)ο笳Z言自制多級菜單功能實現(xiàn)代碼

    菜單類主要負(fù)責(zé)菜單的創(chuàng)建、修改、刪除,是包含菜單結(jié)構(gòu)組織和響應(yīng)函數(shù)的模型,用戶擁有充分的自主性,可根據(jù)需要自定義菜單顯示和響應(yīng)函數(shù),這篇文章主要介紹了C++面向?qū)ο笳Z言自制多級菜單,需要的朋友可以參考下
    2024-06-06
  • C++中int?main(int?argc,?char**?argv)的參數(shù)使用

    C++中int?main(int?argc,?char**?argv)的參數(shù)使用

    int?main(int?argc,?char**?argv)?是C和C++程序的入口點,其中argc和argv是用來接收從命令行傳遞給程序的參數(shù)的,本文就來介紹一下這兩個參數(shù)的含義,感興趣的可以了解一下的相關(guān)資料
    2024-01-01

最新評論

聂荣县| 东乌| 兰州市| 镇宁| 山东省| 侯马市| 沅江市| 天水市| 军事| 江北区| 丰镇市| 闽侯县| 苗栗县| 汶上县| 牙克石市| 谷城县| 灵璧县| 江口县| 灵武市| 包头市| 乐平市| 栖霞市| 宁德市| 明溪县| 图木舒克市| 瑞金市| 正蓝旗| 基隆市| 青阳县| 错那县| 英超| 青海省| 周至县| 河北区| 昌邑市| 名山县| 呼伦贝尔市| 济南市| 五华县| 南康市| 阳信县|