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

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

C+標準是否在C+14中使用不定值和未定義行為方面發(fā)生了變化?

C+標準是否在C+14中使用不定值和未定義行為方面發(fā)生了變化?

C++ C
慕雪6442864 2019-06-06 10:39:04
C+標準是否在C+14中使用不定值和未定義行為方面發(fā)生了變化?包括在初始化是否需要從lvalue到rvalue的轉(zhuǎn)換?是int x = x;UB?C+標準中有一個令人驚訝的例子3.3.2 申報點其中一個int是用它自己的不定值初始化的:int x = 12;{ int x = x; }這里,第二個x是用它自己的(不確定的)值初始化的。-終例 ]約翰斯對這個問題的回答表明,這是一個未定義的行為,因為它需要從lvalue到rvalue的轉(zhuǎn)換。在最新的C+14標準草案中N3936可以找到這里此示例已更改為:unsigned char x = 12;{ unsigned char x = x; }這里,第二個x是用它自己的(不確定的)值初始化的。-終例 ]在這個例子中,C+14中的不確定值和未定義行為是否發(fā)生了改變?
查看完整描述

1 回答

?
holdtom

TA貢獻1805條經(jīng)驗 獲得超10個贊

是的,這一變化是由語言中的變化驅(qū)動的,這些變化使其行為不明確。如果不確定值是由計算生成的。但除了一些例外無符號窄字符.

缺陷報告1787其建議的文本可在N 39141曾.最近于2014年接受并被納入最新的工作草案。N3936:

與不確定值相關的最有趣的更改將是對節(jié)的更改。8.5段落12這包括:

如果沒有為對象指定初始化程序,則該對象是默認初始化的;如果不執(zhí)行初始化,則具有自動或動態(tài)存儲持續(xù)時間的對象的值不確定。[注:具有靜態(tài)或線程存儲持續(xù)時間的對象為零初始化對象,請參見3.6.2。-尾注 ]

到(重點雷):

如果沒有為對象指定初始化程序,則該對象是默認初始化的。當獲得具有自動或動態(tài)存儲持續(xù)時間的對象的存儲時,該對象具有不定值,如果不對象執(zhí)行初始化,則該對象保留一個不確定值,直到替換該值(5.17[expr.ass])。[注意:具有靜態(tài)或線程存儲持續(xù)時間的對象為零初始化,請參見3.6.2[basic.start.init]。-尾注]如果由求值產(chǎn)生不確定值,則除下列情況外,該行為是未定義的。:

  • 如果一個無符號窄字符類型(3.9.1[basic.basic])的不確定值是通過對以下方面的評估而產(chǎn)生的:

    然后,操作的結果是一個不確定的值。

    • 條件表達式的第二個或第三個操作數(shù)(5.16[expr.cond]),

    • 逗號的右操作數(shù)(5.18[除逗號]),

    • 轉(zhuǎn)換或轉(zhuǎn)換為無符號窄字符類型的操作數(shù)(4.7[等號整],5.2.3[expr.type.conv],5.2.9[expr.static.cast],5.4[expr.cast],或

    • 被丟棄的值表達式(第5[expr]條),

  • 如果一個無符號窄字符類型的不確定值(3.9.1[basic.basic])是由一個簡單賦值運算符(5.17[expr.ass])的右操作數(shù)計算產(chǎn)生的,其第一個操作數(shù)是無符號窄字符類型的lvalue,則一個不確定值替換左操作數(shù)所引用的對象的值。

  • 如果在初始化無符號窄字符類型的對象時,通過初始化表達式的計算生成無符號窄字符類型的不確定值(3.9.1[basic.basic]),則該對象被初始化為不確定的值。

并包括以下示例:

例子:

int f(bool b) {
  unsigned char c;
  unsigned char d = c; // OK, d has an indeterminate value
  int e = d;           // undefined behavior
  return b ? d : 0;    // undefined behavior if b is true}

— 終例 ]

我們可以在N 3936哪個是當前工作草案N3937C++14 DIS.

C+1Y之前

有趣的是,在此草案之前,與C不同的是它一直有一個明確的概念,不確定值的用途是未定義的。C+使用了不定值一詞,甚至沒有定義它(假設我們不能借用C99的定義)以及見缺陷報告616..我們不得不依靠未指定的lvalue-rvalue轉(zhuǎn)換C+11標準草案包括在部分4.1 lvalue-rvalue轉(zhuǎn)換段落1上面寫著:

[.]如果對象未初始化,則需要進行此轉(zhuǎn)換的程序具有未定義的行為。[.]


腳注:

  1. 1787

    是對

    缺陷報告616

    ,我們可以在

    N 3903


查看完整回答
反對 回復 2019-06-06
  • 1 回答
  • 0 關注
  • 359 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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