青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

兔子的技術(shù)博客

兔子

   :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

C++操作符的優(yōu)先級(jí)

操作符及其結(jié)合性

功能

用法

L
L
L
::
::
::
全局作用域
類(lèi)作用域
名字空間作用域
::name
class::name
namespace::name
L
L
L
L
L
.
->
[]
()
()
成員選擇
成員選擇
下標(biāo)
函數(shù)調(diào)用
類(lèi)型構(gòu)造
object.member
pointer->member
variable[expr]
name(expr_list)
type(expr_list)
R
R
R
R
R
++
--
typeid
typeid
顯示強(qiáng)制類(lèi)型轉(zhuǎn)換
后自增操作
后自減操作
類(lèi)型ID
運(yùn)行時(shí)類(lèi)型ID
類(lèi)型轉(zhuǎn)換
lvalue++
lvalue--
typeid(type)
typeid(expr)
cast_name<type>(expr)
R
R
R
R
R
R
R
R
R
R
R
R
R
R
sizeof
sizeof
++
--
~
!
-
+
*
&
()
new
delete
delete[]
對(duì)象的大小
類(lèi)型的大小
前自增操作
前自減操作
位求反
邏輯非
一元負(fù)號(hào)
一元正號(hào)
解引用
取地址
類(lèi)型轉(zhuǎn)換
創(chuàng)建對(duì)象
釋放對(duì)象
釋放數(shù)組
sizeof expr
sizeof(type)
++lvalue
--lvalue
~expr
!expr
-expr
+expr
*expr
&expr
(type)expr
new type
delete expr
delete []expr
L
L
->*
.*
指向成員操作的指針
指向成員操作的指針
ptr->*ptr_to_member
obj.*ptr_to_member
L
L
L
*
/
%
乘法
除法
求模(求余)
expr * expr
expr / expr
expr % expr
L
L
+
-
加法
減法
expr + expr
expr - expr
L
L
<<
>>
位左移
位右移
expr << expr
expr >> expr
L
L
L
L
<
<=
>
>=
小于
小于或等于
大于
大于或等于
expr < expr
expr <= expr
expr > expr
expr >= expr
L
R
==
!=
相等
不等
Expr == expr
Expr != expr
R & 位與 Expr & expr
R ^ 位異或 Expr ^ expr
R | 位或 Expr | expr
R && 邏輯與 Expr && expr
R || 邏輯或 Expr || expr
R ?: 條件操作 Expr ? expr : expr
R
R
R
R
R
=
*=,/=,%=
+=,-=
<<=,>>=
&=,|=,^=
賦值操作
符合賦值操作

Lvalue= expr
Lvalue+= expr
……

R throw 拋出異常 Throw expr
L , 逗號(hào) Expr, expr
記憶方法:
--摘自《C語(yǔ)言程序設(shè)計(jì)實(shí)用問(wèn)答》 -呂鳳翥 呂 濤著
問(wèn)題:如何記住運(yùn)算符的15種優(yōu)先級(jí)和結(jié)合性?
解答:C語(yǔ)言中運(yùn)算符種類(lèi)比較繁多,優(yōu)先級(jí)有15種,結(jié)合性有兩種。
如何記憶兩種結(jié)合性和15種優(yōu)先級(jí)?下面講述一種記憶方法。
結(jié)合性有兩種,一種是自左至右,另一種是自右至左,大部分運(yùn)算符的結(jié)合性是自左至右,只有單目運(yùn)算符、三目運(yùn)算符的賦值運(yùn)算符的結(jié)合性自右至左。
優(yōu)先級(jí)有15種。記憶方法如下:
記住一個(gè)最高的:構(gòu)造類(lèi)型的元素或成員以及小括號(hào)。
記住一個(gè)最低的:逗號(hào)運(yùn)算符。
剩余的是一、二、三、賦值。
意思是單目、雙目、三目和賦值運(yùn)算符。
在諸多運(yùn)算符中,又分為:
算術(shù)、關(guān)系、邏輯。
兩種位操作運(yùn)算符中,移位運(yùn)算符在算術(shù)運(yùn)算符后邊,邏輯位運(yùn)算符在邏輯運(yùn)算符的前面。再細(xì)分如下:
算術(shù)運(yùn)算符分 *,/,%高于+,-。
關(guān)系運(yùn)算符中,》,》=,《,〈=高于==,!=。
邏輯運(yùn)算符中,除了邏輯求反(!)是單目外,邏輯與(&&)高于邏輯或(||)。
邏輯位運(yùn)算符中,除了邏輯按位求反(~)外,按位與(&)高于按位半加(^),高于按位或(|)。
這樣就將15種優(yōu)先級(jí)都記住了,再將記憶方法總結(jié)如下:
去掉一個(gè)最高的,去掉一個(gè)最低的,剩下的是一、二、三、賦值。雙目運(yùn)算符中,順序?yàn)樗阈g(shù)、關(guān)系和邏輯,移位和邏輯位插入其中。

為什么后綴++比*操作符優(yōu)先級(jí)高卻后對(duì)p加1?” ——*p++、*++p、++*p和(*p)++中的操作符優(yōu)先級(jí)問(wèn)題
假設(shè)
int a[10]
p1=a;

那么
*p++=1;
*++p=2;
++*p=3;
(*p)++=4;

分別應(yīng)該怎么按照優(yōu)先級(jí)別運(yùn)算?
按照書(shū)上的說(shuō)法++ (后置) >++(前置) >* 解引用用 > = 等于
*p++ 是否應(yīng)該是 現(xiàn)算(p++) 在算* 最后 賦值?
求所有的正確的算法 和解答
---------------------------------------------------------------

++(后綴)屬于“后綴操作符”,其優(yōu)先級(jí)高于“前綴操作符”。
* 和++(前綴)都屬于“前綴操作符”,優(yōu)先級(jí)相同,按從左到右結(jié)合的順序。都高于賦值運(yùn)算符。

所以:
*p++=1 相當(dāng)于 (*(p++)) = 1,也就是說(shuō)++操作于p上,結(jié)果為p原來(lái)的值,再作*運(yùn)算,去除引用,再賦為1。總的作用就是把p引用的對(duì)象賦值為1,并把p加1。

*++p=2 相當(dāng)于(*(++p)) = 2,也就是說(shuō)++操作于p上,結(jié)果為p加1后的值,再作*運(yùn)算,去除引用,再賦值為1。總的作用就是把p加1,然后對(duì)其引用的對(duì)象賦值為2。

++*p=3 相當(dāng)于(++(*p)) = 3,也就是說(shuō)先對(duì)p作*運(yùn)算去除引用,其結(jié)果為p引用的對(duì)象,再把這個(gè)對(duì)象+1,結(jié)果還是這個(gè)對(duì)象,再把它賦值為3。這個(gè)表達(dá)式要求對(duì)象的前綴++操作符的返回值為左值。

(*p)++=4 這里有一個(gè)強(qiáng)制優(yōu)等級(jí)(括號(hào)),它的級(jí)別最高,結(jié)果就是((*p)++) = 4,也就是先對(duì)p作*運(yùn)算去除引用,其結(jié)果為它引用的對(duì)象,然后對(duì)這個(gè)對(duì)象作后綴++操作符,結(jié)果為這個(gè)對(duì)象操作前的值(一般是一個(gè)臨時(shí)變量),然后把它賦值為4,這個(gè)表達(dá)式要求對(duì)象的后綴++操作符的返回值為左值(整數(shù)類(lèi)型是不符合要求的,只對(duì)定義了這個(gè)操作符的對(duì)象類(lèi)型才有可能符合要求)。

這個(gè)問(wèn)題以C中很難試驗(yàn)出來(lái),在C++中可以用操作符重載的方法看清楚(操作符重載不會(huì)改變優(yōu)先級(jí)):

#include <iostream>

class test
{
public:
test(){}
test(int){}
test& operator = (const test&){std::cout<<"Assignment of test" << std::endl; return *this;}
test& operator ++ (){std::cout << "Prefix ++ of test" << std:: endl; return * this;}
test& operator ++ (int) {std::cout << "Suffix ++ of test" << std::endl; return *this;}
};
class testptr
{
test Value;
public:
testptr& operator = (const test&){std::cout<<"Assignment of testptr" << std::endl; return *this;}
testptr& operator ++ (){std::cout << "Prefix ++ of testptr" << std:: endl; return * this;}
testptr& operator ++ (int) {std::cout << "Suffix ++ of testptr" << std::endl; return *this;}
test& operator *(){std::cout<< "Operator * of testptr"<<std::endl; return Value;}
};

#define TRACK(X) std::cout <<std::endl<<"***** "<< #X << " *****" <<std::endl; X
int main()
{
testptr p;
TRACK(*p++=1);
TRACK(*++p=2);
TRACK(++*p=3);
TRACK((*p)++=4);
std::cin.get();
}

輸出為
***** *p++=1 *****
Suffix ++ of testptr
Operator * of testptr
Assignment of test

***** *++p=2 *****
Prefix ++ of testptr
Operator * of testptr
Assignment of test

***** ++*p=3 *****
Operator * of testptr
Prefix ++ of test
Assignment of test

***** (*p)++=4 *****
Operator * of testptr
Suffix ++ of test
Assignment of test


int p = 1;
int a = p++;
結(jié)果a=1,并不是因?yàn)楹缶Y++優(yōu)先級(jí)低(我記得有一本C教材就是這樣寫(xiě)的,真是誤人子弟),而是由后綴++的語(yǔ)義決定的。標(biāo)準(zhǔn)的后綴++應(yīng)該是 “對(duì)操作對(duì)象做+1操作,并返回操作前的值”,它在賦值運(yùn)算前運(yùn)算了,但它的返回值并不是p,而是p在做+1運(yùn)算前的值。因此我們還可以知道,p++的返回值應(yīng)該不是一個(gè)左值,p++=a是無(wú)法編譯通過(guò)的。而前綴++則不一樣,++p的含義就是“對(duì)p做+1運(yùn)算,并返回p”,其返回值就是p本身(引用),是一個(gè)左值,++p = a是可以編譯的(但沒(méi)什么意義)。

如果用代碼描述一下這兩個(gè)操作符,應(yīng)該是這樣的:

const int int::operator ++(int)//后綴++
{
int temp = *this;
*this = *this +1;
return temp;
}

int& int::operator ++()//前綴++
{
*this = *this + 1;
return *this;
}


補(bǔ)充:
在C中,上述語(yǔ)句含義分別是:
*p++=1; --> temp = p + 1; *temp = 1;
*++p=2; --> p = p +1; * p = 1;
++*p=3; --> *p = *p + 1; *p = 3;
(*p)++=4;//語(yǔ)法錯(cuò)誤,無(wú)法寫(xiě)出對(duì)應(yīng)的語(yǔ)句。

由于后綴增/減量操作符的特殊性,導(dǎo)致初學(xué)者很難理解“為什么后綴的++優(yōu)先級(jí)高卻后對(duì)變量加1呢?”事實(shí)上,事實(shí)上,“后綴++”并不是后對(duì)變量加1,而是先做了,只是它的返回值并不是這個(gè)變量,而是這個(gè)變量改變前的值。如果對(duì)它很難理解,建議不要使用這幾個(gè)操作符,而改用普通的加/減法操作符:
*p++=1; --> *p = 1; p = p + 1;
*++p=2; --> p = p + 1; *p = 2;
++*p=3; --> *p = *p + 1; *p = 3;
(*p)++=4;//語(yǔ)法錯(cuò)誤,無(wú)法寫(xiě)出對(duì)應(yīng)的語(yǔ)句。

由于在C++中這幾個(gè)操作符不再是整數(shù)和指針類(lèi)型特有的,而是可以為類(lèi)定義的,并且它們可以和+/-1操作語(yǔ)義不同或根本沒(méi)有加/減法操作符(如雙向迭代器),不能簡(jiǎn)單地用加/減法代替。不過(guò)C++程序員們可以通過(guò)看比較好的類(lèi)的操作符重載函數(shù)(如迭代器的)代碼真正明白后綴增/減量操作符的語(yǔ)義,不會(huì)因?yàn)樗?#8220;優(yōu)先級(jí)高卻后對(duì)變量加1”的問(wèn)題糊涂。不過(guò),僅管如此,我還是認(rèn)為使用增/減量操作符時(shí)最好讓一個(gè)表達(dá)式中或者沒(méi)有增/減量操作符,或者只有一個(gè)增/減量操作符,如:++p;*p = 1;(相當(dāng)于*++p = 1)或*p = 1;++p;(相當(dāng)于*p++=1),這樣也不用去區(qū)分前綴和后綴的區(qū)別了。



轉(zhuǎn)自:http://blog.163.com/wjh2-316/blog/static/2787275320086810153137/
posted on 2011-04-19 13:46 會(huì)飛的兔子 閱讀(661) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): C++及開(kāi)發(fā)環(huán)境
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久av水蜜桃| 国产精品第一区| 久久精品视频免费观看| 国产一区在线观看视频| 亚洲国产欧美一区二区三区久久| 午夜天堂精品久久久久 | 欧美日韩人人澡狠狠躁视频| 亚洲国产一区二区a毛片| 亚洲一区在线免费观看| 久久综合久久综合九色| 亚洲国产精品久久91精品| 一区二区三区成人精品| 国产日韩欧美一二三区| 欧美资源在线观看| 一区二区三区精密机械公司| 欧美一区二区精品| 久久精品成人一区二区三区| 亚洲品质自拍| 老司机成人在线视频| 亚洲老司机av| 亚洲免费观看在线观看| 欧美高清不卡| 校园激情久久| 久久久久久久一区二区| 男人的天堂亚洲| 日韩午夜视频在线观看| av成人免费在线观看| 亚洲宅男天堂在线观看无病毒| 亚洲综合色自拍一区| 午夜精品一区二区三区在线| 久久久精品动漫| 欧美日韩午夜在线| 尤物视频一区二区| 西西裸体人体做爰大胆久久久| 老牛嫩草一区二区三区日本 | 中文成人激情娱乐网| 欧美专区第一页| 99爱精品视频| 欧美成人精品在线| 国产一区二区三区免费在线观看| 夜夜嗨一区二区三区| 免费永久网站黄欧美| 欧美在线视频观看| 国产精品色午夜在线观看| 日韩午夜剧场| 亚洲国产高清在线观看视频| 亚洲美女淫视频| 欧美成人三级在线| 在线观看视频日韩| 浪潮色综合久久天堂| 欧美一区二区网站| 国产欧美亚洲视频| 午夜精彩视频在线观看不卡 | 亚洲国产精品成人久久综合一区| 久久精品99久久香蕉国产色戒 | 欧美成年人视频网站| 欧美在线观看www| 国产毛片精品视频| 欧美一区影院| 亚洲欧美制服中文字幕| 国产精品一区二区黑丝| 亚洲欧美日韩专区| 中文日韩欧美| 欧美激情在线免费观看| 欧美一级播放| 亚洲免费观看视频| 欧美日韩在线影院| 亚洲欧美日韩一区在线观看| 亚洲婷婷国产精品电影人久久| 欧美视频第二页| 亚洲欧美精品| 午夜在线精品偷拍| 国产专区一区| 亚洲丶国产丶欧美一区二区三区| 久久免费视频网站| 亚洲日本免费| 一区二区三区免费看| 国产精品欧美久久| 久久久国产精品亚洲一区 | 亚洲综合丁香| 亚洲欧美日韩精品久久奇米色影视| 国产乱肥老妇国产一区二| 久久精品国产免费观看| 久久久噜噜噜久久中文字幕色伊伊| 亚洲福利视频一区二区| 亚洲人成高清| 国产精品入口| 免费日韩成人| 欧美视频观看一区| 久久久水蜜桃av免费网站| 美女精品在线| 午夜电影亚洲| 久久伊伊香蕉| 亚洲综合视频网| 久久一二三国产| 亚洲资源av| 免费看亚洲片| 性久久久久久久久| 欧美第一黄色网| 欧美专区在线| 欧美日韩一区二区三区在线| 欧美综合二区| 欧美日韩视频免费播放| 久久综合久久美利坚合众国| 欧美日韩国产综合新一区| 欧美在线视频播放| 欧美福利一区二区三区| 欧美亚洲综合在线| 欧美激情影院| 两个人的视频www国产精品| 欧美视频精品一区| 欧美激情日韩| 伊人久久婷婷| 欧美影视一区| 午夜日韩在线观看| 欧美另类69精品久久久久9999| 久久久久成人精品| 欧美婷婷六月丁香综合色| 亚洲黄一区二区| 在线观看国产精品网站| 亚洲欧美中日韩| 欧美亚洲在线| 欧美午夜不卡影院在线观看完整版免费| 欧美成人精品影院| 国产在线欧美日韩| 亚洲国产一区二区三区a毛片| 中文在线资源观看网站视频免费不卡 | 欧美黄色免费| 精品av久久久久电影| 亚洲欧美综合国产精品一区| 亚洲一级二级| 欧美日韩一区自拍| 亚洲精品视频二区| 99精品国产福利在线观看免费| 看片网站欧美日韩| 欧美国产一区二区| 亚洲韩国精品一区| 免费成人高清视频| 亚洲国产精品成人一区二区| 一区免费在线| 麻豆国产精品777777在线| 欧美成人免费一级人片100| 极品尤物av久久免费看| 久久久人成影片一区二区三区 | 一区二区三区高清在线| 欧美激情精品久久久久久大尺度 | 久久伊伊香蕉| 亚洲国产成人久久综合| 欧美成人一区二区三区片免费| 亚洲成色www8888| 亚洲精品一区二区网址| 欧美日韩p片| 亚洲婷婷综合色高清在线 | 亚洲激情网站| 欧美日本亚洲视频| 亚洲视频精品在线| 久久久久久久久综合| 91久久国产综合久久| 欧美精品一区二| 亚洲一区在线看| 久久综合国产精品| 日韩一二三区视频| 国产精品一区二区欧美| 久久久精品久久久久| 亚洲高清视频的网址| 亚洲一区二区精品在线| 国产亚洲午夜高清国产拍精品| 久久人人爽人人爽爽久久| 亚洲精品乱码久久久久久久久 | 欧美三级第一页| 亚洲欧美一区二区视频| 免费久久99精品国产自在现线| 91久久久久久久久| 国产精品久久久久aaaa樱花| 欧美在线精品免播放器视频| 欧美国产在线视频| 亚洲视频在线观看| 国内视频一区| 欧美大片91| 羞羞色国产精品| 最近中文字幕日韩精品| 欧美一区二区视频在线| 亚洲国产欧美在线| 国产美女一区二区| 欧美精品一区二区三| 久久成年人视频| 在线中文字幕不卡| 亚洲国产片色| 狂野欧美激情性xxxx欧美| 亚洲影院高清在线| 亚洲精品专区| 激情懂色av一区av二区av| 欧美日韩亚洲另类| 欧美成人精品三级在线观看| 欧美在线观看日本一区| 亚洲一区二区三区高清不卡| 亚洲国产成人在线视频| 蜜臀a∨国产成人精品| 性感少妇一区| 午夜精品偷拍|