第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否要求短路邏輯運營商?和評估順序?

是否要求短路邏輯運營商?和評估順序?

C++ C
拉莫斯之舞 2019-05-28 17:52:41
是否要求短路邏輯運營商?和評估順序?ANSI標(biāo)準(zhǔn)是否要求邏輯運算符在C或C ++中被短路?我很困惑,因為我記得K&R的書說你的代碼不應(yīng)該依賴于這些操作被短路,因為它們可能沒有。有人可以指出標(biāo)準(zhǔn)中的哪個位置邏輯操作始終是短路的嗎?我最感興趣的是C ++,C的答案也很棒。我還記得讀(不記得在哪里)評估順序沒有嚴(yán)格定義,所以你的代碼不應(yīng)該依賴或假設(shè)表達(dá)式中的函數(shù)將按特定的順序執(zhí)行:在語句的末尾所有引用的函數(shù)將被調(diào)用,但編譯器可以自由選擇最有效的順序。標(biāo)準(zhǔn)是否表明該表達(dá)式的評估順序?if( functionA() && functionB() && functionC() ) cout<<"Hello world";
查看完整描述

3 回答

?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗 獲得超17個贊

是的,它要求(評估順序和短路)。在您的示例中,如果所有函數(shù)都返回true,則調(diào)用的順序嚴(yán)格來自functionA,然后是functionB,然后是functionC。用于此類似

if(ptr && ptr->value) { 
    ...}

逗號運算符相同:

// calls a, then b and evaluates to the value returned by b// which is used to initialize cint c = (a(), b());

一個表示的左邊和右邊的操作數(shù)之間&&,||,,和的第一和第二/第三操作數(shù)之間?:(條件運算符)是一個“點序列”。在此之前完全評估任何副作用。所以,這是安全的:

int a = 0;int b = (a++, a); // b initialized with 1, and a is 1

請注意,不要將逗號運算符與用于分隔事物的語法逗號混淆:

// order of calls to a and b is unspecified!function(a(), b());

C ++標(biāo)準(zhǔn)中說5.14/1

&&運算符從左到右分組。操作數(shù)都隱式轉(zhuǎn)換為bool類型(第4節(jié))。如果兩個操作數(shù)都為真,則結(jié)果為true,否則為false。與&不同,&&保證從左到右的評估:如果第一個操作數(shù)為假,則不評估第二個操作數(shù)。

并在5.15/1

|| 操作員組從左到右。操作數(shù)都隱式轉(zhuǎn)換為bool(第4節(jié))。如果其任一操作數(shù)為true,則返回true,否則返回false。與|,||不同 保證從左到右的評估; 此外,如果第一個操作數(shù)的計算結(jié)果為true,則不計算第二個操作數(shù)。

它說旁邊的那些:

結(jié)果是布爾。除了臨時破壞之外,第一個表達(dá)式的所有副作用(12.2)發(fā)生在評估第二個表達(dá)式之前。

除此之外,1.9/18

在評估每個表達(dá)式時

  • a && b

  • a || b

  • a ? b : C

  • a , b

使用這些表達(dá)式(5.14,5.15,5.16,5.18)中運算符的內(nèi)置含義,在評估第一個表達(dá)式后有一個序列點。


查看完整回答
反對 回復(fù) 2019-05-28
  • 3 回答
  • 0 關(guān)注
  • 695 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號