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

C++超詳細(xì)講解逗號(hào)操作符

 更新時(shí)間:2022年05月31日 11:02:58   作者:清風(fēng)自在?流水潺潺  
使用逗號(hào)運(yùn)算符是為了把幾個(gè)表達(dá)式放在一起。整個(gè)逗號(hào)表達(dá)式的值為系列中最后一個(gè)表達(dá)式的值。從本質(zhì)上講,逗號(hào)的作用是將一系列運(yùn)算按順序執(zhí)行

一、逗號(hào)操作符

逗號(hào)操符( , )可以構(gòu)成逗號(hào)表達(dá)式

  • 逗號(hào)表達(dá)式用于將多個(gè)子表達(dá)式連接為一個(gè)表達(dá)式
  • 逗號(hào)表達(dá)式的值為最后一個(gè)子表達(dá)式的值
  • 逗號(hào)表達(dá)式中的前 N-1 個(gè)子表達(dá)式可以沒有返回值
  • 逗號(hào)表達(dá)式按照從左向右的順序計(jì)算每個(gè)子表達(dá)式的值

下面看一個(gè)逗號(hào)表達(dá)式的示例:

#include <iostream>
using namespace std;
void func(int i)
{
    cout << "func(): i = " << i << endl;
}
int main()
{
    int a[3][3] = {
        (0, 1, 2),
        (3, 4, 5),
        (6, 7, 8)
    };
    int i = 0;
    int j = 0;
    while(i < 5)
        func(i),
    i++;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            cout << a[i][j] << endl;
        }
    }
    (i, j) = 6;
    cout << "i = " << i << endl;
    cout << "j = " << j << endl;
    return 0;
}

輸出結(jié)果如下:

注意三點(diǎn):

1.使用括號(hào),就不是初始化的方式,就變成了逗號(hào)表達(dá)式。要想其變成真正的初始化語句,需要把圓括號(hào)改成花括號(hào)。即

   int a[3][3] = {
        {0, 1, 2},
        {3, 4, 5},
        {6, 7, 8}
    };

2.這個(gè)

while(i < 5)
        func(i),
    i++;

等價(jià)于

while(i < 5)
{
    func(i);
    i++; 
}

3.(i, j) = 6; 按照逗號(hào)表達(dá)式的規(guī)則,就是等價(jià)于 j = 6;

二、重載逗號(hào)操作符

  • 在C++ 中重載逗號(hào)操作符是合法的
  • 使用全局函數(shù)對(duì)逗號(hào)操作符進(jìn)行重載
  • 重載函數(shù)的參數(shù)必須有一個(gè)是類類型
  • 重載函數(shù)的返回值類型必須是引用

下面來嘗試一下重載逗號(hào)操作符:

#include <iostream>
using namespace std;
class Test
{
    int mValue;
public:
    Test(int i)
    {
        mValue = i;
    }
    int value()
    {
        return mValue;
    }
};
Test& operator , (const Test& a, const Test& b)
{
    return const_cast<Test&>(b);
}
Test func(Test& i)
{
    cout << "func(): i = " << i.value() << endl;
    return i;
}
int main()
{
    Test t0(0);
    Test t1(1);
    Test tt = (func(t0), func(t1));
    cout << tt.value() << endl;
    return 0;
}

輸出結(jié)果如下:

其中

Test tt = (func(t0), func(t1));

等價(jià)于:

Test tt = (operator , (func(t0), func(t1)));

問題的本質(zhì)分析

  • C++ 通過函數(shù)調(diào)用擴(kuò)展操作符的功能
  • 進(jìn)入函數(shù)體前必須完成所有參數(shù)的計(jì)算
  • 函數(shù)參數(shù)的計(jì)算次序是不定的
  • 重載后無法嚴(yán)格從左向右計(jì)算表達(dá)式

可以看一下不重載會(huì)輸出什么,把下面這段注釋掉。

Test& operator , (const Test& a, const Test& b)
{
    return const_cast<Test&>(b);
}

輸出如下:

可以看到不重載逗號(hào)操作符是按照從左到右執(zhí)行,重載后反而不正常了,所以逗號(hào)操作符沒有重載的必要。

注意事項(xiàng):工程中不要重載逗號(hào)操作符?。?!

三、小結(jié)

  • 逗號(hào)表達(dá)式從左向右順序計(jì)算每個(gè)子表達(dá)式的值
  • 逗號(hào)表達(dá)式的值為最后一個(gè)子表達(dá)式的值
  • 操作符重載無法完全實(shí)現(xiàn)逗號(hào)操作符的原生意義
  • 工程開發(fā)中不要重載逗號(hào)操作符

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

相關(guān)文章

  • C++核心編程之占位參數(shù)和默認(rèn)參數(shù)

    C++核心編程之占位參數(shù)和默認(rèn)參數(shù)

    這篇文章主要介紹了C++核心編程之占位參數(shù)和默認(rèn)參數(shù),c++中函數(shù)的形參列表中的形參是可以有默認(rèn)值的,函數(shù)的形參列表里可以有占位參數(shù),用來占位,調(diào)用函數(shù)時(shí)必須填補(bǔ)位置。下面更多相關(guān)內(nèi)容的詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-03-03
  • C++超詳細(xì)講解友元的使用

    C++超詳細(xì)講解友元的使用

    采用類的機(jī)制后實(shí)現(xiàn)了數(shù)據(jù)的隱藏與封裝,類的數(shù)據(jù)成員一般定義為私有成員,成員函數(shù)一般定義為公有的,依此提供類與外界間的通信接口。但是,有時(shí)需要定義一些函數(shù),這些函數(shù)不是類的一部分,但又需要頻繁地訪問類的數(shù)據(jù)成員,這時(shí)可以將這些函數(shù)定義為該類的友元函數(shù)
    2022-04-04
  • C語言使用setjmp和longjmp實(shí)現(xiàn)一個(gè)簡單的協(xié)程

    C語言使用setjmp和longjmp實(shí)現(xiàn)一個(gè)簡單的協(xié)程

    這篇文章主要為大家介紹了C語言使用setjmp和longjmp實(shí)現(xiàn)一個(gè)簡單的協(xié)程過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • C++入門之vector使用詳解

    C++入門之vector使用詳解

    這篇文章主要為大家介紹了C++入門之vector使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • c++實(shí)現(xiàn)reactor高并發(fā)服務(wù)器的詳細(xì)教程

    c++實(shí)現(xiàn)reactor高并發(fā)服務(wù)器的詳細(xì)教程

    這篇文章主要介紹了c++從零實(shí)現(xiàn)reactor高并發(fā)服務(wù)器,包括環(huán)境準(zhǔn)備和基礎(chǔ)知識(shí)介紹,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • OpenGL繪制Bezier曲線的方法

    OpenGL繪制Bezier曲線的方法

    這篇文章主要為大家詳細(xì)介紹了OpenGL繪制Bezier曲線的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++回文數(shù)及素?cái)?shù)問題計(jì)算方法

    C++回文數(shù)及素?cái)?shù)問題計(jì)算方法

    這篇文章主要介紹了C++回文數(shù)及素?cái)?shù)問題計(jì)算方法,可實(shí)現(xiàn)一定范圍內(nèi)的素?cái)?shù)與回文數(shù)運(yùn)算功能,涉及C++字符串遍歷與數(shù)字?jǐn)?shù)學(xué)運(yùn)算的相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • C++移動(dòng)操作,RVO和NRVO詳細(xì)

    C++移動(dòng)操作,RVO和NRVO詳細(xì)

    本文將討論了何時(shí)C++會(huì)自動(dòng)進(jìn)行移動(dòng)操作,并且說明了復(fù)制消除,RVO和NRVO優(yōu)的化等香瓜吧資料,需要的小伙伴可以參考一下
    2021-09-09
  • 利用C++11原子量如何實(shí)現(xiàn)自旋鎖詳解

    利用C++11原子量如何實(shí)現(xiàn)自旋鎖詳解

    當(dāng)自旋鎖嘗試獲取鎖時(shí)以忙等待(busy waiting)的形式不斷地循環(huán)檢查鎖是否可用,下面這篇文章主要給大家介紹了關(guān)于利用C++11原子量如何實(shí)現(xiàn)自旋鎖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-06-06
  • 使用VC++實(shí)現(xiàn)打印乘法口訣表

    使用VC++實(shí)現(xiàn)打印乘法口訣表

    本文給大家分享的是一個(gè)超級(jí)簡單的小例子,使用vc++打印乘法口訣表,給需要的小伙伴參考下吧。
    2015-03-03

最新評(píng)論

南涧| 墨江| 青龙| 颍上县| 秭归县| 镇康县| 柏乡县| 南靖县| 桃园市| 德化县| 维西| 杂多县| 特克斯县| 咸阳市| 马鞍山市| 蓬安县| 文安县| 平遥县| 西城区| 新平| 高要市| 安陆市| 旅游| 若尔盖县| 治多县| 喀喇沁旗| 城固县| 饶平县| 涞水县| 项城市| 洪泽县| 荆门市| 会理县| 青田县| 承德市| 桂林市| 宁都县| 外汇| 酉阳| 沁水县| 青州市|