欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++超詳細講解逗號操作符

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

一、逗號操作符

逗號操符( , )可以構成逗號表達式

  • 逗號表達式用于將多個子表達式連接為一個表達式
  • 逗號表達式的值為最后一個子表達式的值
  • 逗號表達式中的前 N-1 個子表達式可以沒有返回值
  • 逗號表達式按照從左向右的順序計算每個子表達式的值

下面看一個逗號表達式的示例:

#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é)果如下:

注意三點:

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

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

2.這個

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

等價于

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

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

二、重載逗號操作符

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

下面來嘗試一下重載逗號操作符:

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

等價于:

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

問題的本質(zhì)分析

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

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

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

輸出如下:

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

注意事項:工程中不要重載逗號操作符?。?!

三、小結(jié)

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

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

相關文章

  • c++ cin 作為while條件(詳解)

    c++ cin 作為while條件(詳解)

    下面小編就為大家?guī)硪黄猚++ cin 作為while條件(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • c++ 類函數(shù)作為模板參數(shù)實現(xiàn)方式詳解

    c++ 類函數(shù)作為模板參數(shù)實現(xiàn)方式詳解

    這篇文章主要介紹了c++ 類函數(shù)作為模板參數(shù)實現(xiàn)方式,在實現(xiàn)中加入增強邏輯,這種方式對代碼侵入性過高,而且無法控制該邏輯是否需要,如果不需要的話又得重新修改代碼實現(xiàn),需要的朋友可以參考下
    2023-03-03
  • Linux C 時間函數(shù)應用

    Linux C 時間函數(shù)應用

    本文是關于Linux C時間函數(shù) time_t struct tm 進行了詳細的分析介紹并有應用實例,希望能幫到有需要的同學
    2016-07-07
  • 一文搞懂C++11萬能引用和右值引用

    一文搞懂C++11萬能引用和右值引用

    本文主要介紹了C++11萬能引用和右值引用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • QT網(wǎng)絡通信TCP客戶端實現(xiàn)詳解

    QT網(wǎng)絡通信TCP客戶端實現(xiàn)詳解

    這篇文章主要為大家詳細介紹了QT網(wǎng)絡通信TCP客戶端實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++實現(xiàn)json形式的Socket傳輸圖片

    C++實現(xiàn)json形式的Socket傳輸圖片

    這篇文章主要為大家詳細介紹了C++實現(xiàn)json形式的Socket傳輸圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++ LibCurl實現(xiàn)Web指紋識別功能

    C++ LibCurl實現(xiàn)Web指紋識別功能

    Web指紋識別是一種通過分析Web應用程序的特征和元數(shù)據(jù),以確定應用程序所使用的技術棧和配置的技術,本文將通過C++中LibCurl庫實現(xiàn)簡單是指紋識別功能,感興趣的可以了解下
    2023-11-11
  • c++中.dll與.lib文件的生成與使用的詳解

    c++中.dll與.lib文件的生成與使用的詳解

    本篇文章介紹了,在c++中.dll與.lib文件的生成與使用的詳細介紹,需要的朋友參考下
    2013-05-05
  • 基于C++中常見內(nèi)存錯誤的總結(jié)

    基于C++中常見內(nèi)存錯誤的總結(jié)

    本篇文章是對C++中常見的內(nèi)存錯誤進行了總結(jié)介紹。需要的朋友參考下
    2013-05-05
  • 簡易Dota改鍵外掛程序制作

    簡易Dota改鍵外掛程序制作

    利用全局鉤子制作一個個性化的dota游戲改鍵功能,大家可以參考使用
    2013-11-11

最新評論