国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

第三十九課:逗號操作符的分析----------狄泰軟件學院

2019-11-14 11:46:44
字體:
來源:轉載
供稿:網友

一、逗號操作符(,)可以構造逗號表達式

1.逗號操作符可以用于將多個子表達式連接為一個表達式 2.逗號表達式的值為最后一個子表達式的值 3.逗號表達式的前N-1個子表達式可以沒有返回值 4.逗號表達式按照從左往右的順序計算每個子表達式的值

#include <iostream>#include <string>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) };//注意用了括號,所以最終只有2,5,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;//最后相當于給j賦值 cout << "i = " << i << endl; cout << "j = " << j << endl; return 0;}輸出結果func() : i = 0func() : i = 1func() : i = 2func() : i = 3func() : i = 4258000000i = 3j = 6

二、重載逗號操作符

1.在c++中重載逗號操作符是合法的 2.使用全局函數對逗號操作符進行重載 3.重載函數的參數必須有一個是類類型 4.重載函數的返回值類型必須是引用

class Operator , (const class& a, const class& b){ return const_cast<class&>(b);//注意返回的是最后的參數}#include <iostream>#include <string>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));// operator , (func(t0),func(t1))參數的計算順序不確定 cout << tt.value() << endl; // 1 return 0;}輸出結果:func() : i = 1func() : i = 01但若把逗號操作符重載函數去掉則會得到正確結果

問題的本質分析:

1.c++通過函數調用擴展操作符的功能 2.進入函數體前必須完成所有參數的計算 3.函數參數的計算次序是不定的 4.重載后無法嚴格從左向右計算表達式

注意:工程中無需重載逗號操作符

小結:

1.逗號表達式從左往右順序計算每個子表達式的值 2.逗號表達式的值為最后一個子表達式的值 3.操作符重載無法完全實現逗號操作符的原生語義 4.工程開發中不要重載逗號操作符


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临洮县| 红河县| 定安县| 隆昌县| 高邑县| 得荣县| 舟曲县| 灵丘县| 连平县| 滦平县| 上高县| 余江县| 陆川县| 漳平市| 抚顺县| 黄山市| 遂川县| 周口市| 石门县| 定陶县| 南通市| 米脂县| 罗平县| 闻喜县| 鄂托克旗| 昭觉县| 仲巴县| 苏尼特左旗| 汕头市| 冷水江市| 惠水县| 聂拉木县| 沙河市| 博湖县| 汉中市| 来安县| 蕉岭县| 湘阴县| 德阳市| 祁连县| 湾仔区|