Cpp:賦值鹊碍、自增和箭頭操作符等

1、賦值操作

賦值的左操作數(shù)必須是非const左值:

int i, j, val;
const int ci = i;    //ok
1024 = val;        //error: 字面值是右值
i + j = val;    //error: 算術(shù)運算結(jié)果是右值
ci = val;        //error: 不能賦值

右結(jié)合性

int val1, val2;
val1 = val2 = 0;

上述語句將 val2 賦給 val1.但下面是錯誤的

int val, *p;
val = p = 0;    //error

上面: p=0 成立粱挡,但 val = p 出錯衬衬。

復(fù)合賦值操作符

說明 操作符
算術(shù)操作符 += -= *= /= %=
位操作符 <<= >>= &= ^= =

使用方法

a op= b;    //op表示操作符

等價于

a = a op b;

2、自增自減

int i = 0, j;
j = ++i;    //j = 1, i = 1; ++i返回自增后的結(jié)果
j = i++;    //j = 1, i = 2; i++返回未自增的結(jié)果

組合使用解引用和自增

vector<int>::iterator iter = ivec.begin();
while(iter != ivec.end()){
    cout << *iter++ << endl;
}

自增的優(yōu)先級高于解引用刁笙,即相當(dāng)于 *(iter++)破花。

箭頭操作符

C++為包含 點操作解引用 的表達式提供 箭頭操作符

Item *p = &item1;
(*p).func();    //1
p->func();        //2

1,2 等價疲吸。

舉例

編寫程序:定義vector對象旧乞,其每個元素指向string類型的指針;輸出每個元素的內(nèi)容及長度磅氨。

string s;
vector<string *> v;
while (cin >> s)
{
    string *sp = new string(s);
    v.push_back(sp);
}
vector<string *>::iterator iter = v.begin();
while (iter != v.end()) {
    string *tmp = *iter;
    cout << tmp->size() << ", " << *tmp << endl;
    delete tmp;
    iter++;
}

測試結(jié)果

hello↙
world!↙
^Z↙
5, hello
6, world!

條件操作符

cond ? expr1 : expr2;

先計算 cond 的值,如果為true嫡纠,則計算 expr1烦租,否則計算 expr2〕担可以嵌套使用叉橱,如:求三個數(shù)的最大值

int max = i > j
    ? i > k ? i : k
    : j > k ? j : k;

但并不推薦這樣做,可以換成下列代碼:

int max = i;
if (j > max)
    max = j;
if (k > max)
    max = k;

輸出表達式中使用條件操作符

cout << (i<j?i:j) <<endl;    //ok
cout << (i<j)?i:j;    //打印1或0
cout << i<j?i:j <<endl;        //error: 將cout與int比較

第二句相當(dāng)于

cout << (i<j);    //打印1或0者蠕,然后返回cout對象
cout ? i : j;    //檢測cout窃祝,然后計算i或j

sizeof操作符

返回一個對象或類型名的長度

sizeof(type_name);
sizeof(expr);
sizeof expr;
  • 對char類型或char類型值做sizeof結(jié)果為1;
  • 對指針踱侣,返回存放該指針所需的內(nèi)存粪小;若需要獲得指針所指內(nèi)容,需要解引用操作抡句;
  • 對數(shù)組探膊,等價于對數(shù)組元素做sizeof再乘以元素的個數(shù);

逗號操作符

是一組由逗號分隔的表達式待榔,這些表達式從左至右計算逞壁,結(jié)果是其最右邊的表達式值

int cnt = vec.size();
for(vector<int>::size_type ix = 0; ix != vec.size(); ++ix, --cnt)
    vec[ix] = cnt;

每次循環(huán)流济,ix自增1,cnt自減1.

END.


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腌闯,一起剝皮案震驚了整個濱河市绳瘟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姿骏,老刑警劉巖糖声,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異工腋,居然都是意外死亡姨丈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門擅腰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蟋恬,“玉大人,你說我怎么就攤上這事趁冈〖哒” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵渗勘,是天一觀的道長沐绒。 經(jīng)常有香客問我,道長旺坠,這世上最難降的妖魔是什么乔遮? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮取刃,結(jié)果婚禮上蹋肮,老公的妹妹穿的比我還像新娘。我一直安慰自己璧疗,他們只是感情好坯辩,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著崩侠,像睡著了一般漆魔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上却音,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天改抡,我揣著相機與錄音,去河邊找鬼系瓢。 笑死雀摘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的八拱。 我是一名探鬼主播阵赠,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼涯塔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了清蚀?” 一聲冷哼從身側(cè)響起匕荸,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枷邪,沒想到半個月后榛搔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡东揣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年践惑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘶卧。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡尔觉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芥吟,到底是詐尸還是另有隱情侦铜,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布钟鸵,位于F島的核電站钉稍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棺耍。R本人自食惡果不足惜贡未,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒙袍。 院中可真熱鬧俊卤,春花似錦、人聲如沸左敌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矫限。三九已至,卻和暖如春佩抹,著一層夾襖步出監(jiān)牢的瞬間叼风,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工棍苹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留无宿,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓枢里,卻偏偏與公主長得像孽鸡,于是被迫代替她去往敵國和親蹂午。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容