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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

當(dāng)我們引用非靜態(tài)數(shù)據(jù)成員時(shí),分段錯(cuò)誤實(shí)際上是未定義的行為嗎?

當(dāng)我們引用非靜態(tài)數(shù)據(jù)成員時(shí),分段錯(cuò)誤實(shí)際上是未定義的行為嗎?

C++ C
Cats萌萌 2019-05-30 11:15:27
當(dāng)我們引用非靜態(tài)數(shù)據(jù)成員時(shí),分段錯(cuò)誤實(shí)際上是未定義的行為嗎?我讀了下面的規(guī)則,我一直試圖寫(xiě)一個(gè)例子,它反映了一個(gè)例子。規(guī)則從3.8/5 N 3797開(kāi)始:在對(duì)象的生存期開(kāi)始之前,但在分配了對(duì)象將占用的存儲(chǔ)之后,或者在對(duì)象的生存期結(jié)束之后,在對(duì)象占用的存儲(chǔ)被重用或釋放之前,任何指向?qū)ο髮⑽挥诨蛟?jīng)位于的存儲(chǔ)位置的指針都可以被使用,但只能以有限的方式使用。關(guān)于正在建造或毀壞的物體,見(jiàn)12.7。不然的話,這樣的指針引用已分配的存儲(chǔ)(3.7.4.2),并將指針當(dāng)作指針的類(lèi)型使用。void*定義得很清楚。允許通過(guò)這樣的指針進(jìn)行間接操作,但得到的lvalue只能以有限的方式使用,如下所述。在下列情況下,程序具有未定義的行為:[...]-指針用于訪問(wèn)非靜態(tài)數(shù)據(jù)成員或調(diào)用對(duì)象的非靜態(tài)成員函數(shù),或[...]我寫(xiě)的例子是:#include <iostream>#include <typeinfo>using std::cout;using std::endl;struct A{     int b = 5;     static const int a = 5;};int main(){     A *p = (A*)0xa31a3442;     cout << p -> a; //1, Well-fromed, there is no compile-time error     cout << p -> b; //2, Segmentation fault is producing}在這種情況下//1是格式良好的,不會(huì)造成任何UB,但是//2產(chǎn)生的分割錯(cuò)誤,即UB?
查看完整描述

3 回答

?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

規(guī)則3.8/5是關(guān)于對(duì)象的構(gòu)造/銷(xiāo)毀以外的時(shí)間,而是對(duì)象所在內(nèi)存的分配/釋放時(shí)間。以下說(shuō)明對(duì)象生命周期之外的點(diǎn):


void *buffer = malloc(sizeof(A));

// outside of lifetime of a

// a->b is undefined

A* a = new (buffer) A();

// within lifetime of a

// a->b is valid

a->~A();

// outside of lifetime of a

// a->b is undefined

free(buffer);

從技術(shù)上講,您的帖子實(shí)際上并不反映規(guī)則3.8/5,因?yàn)槟鷽](méi)有在對(duì)象生命周期之外訪問(wèn)它。您只是將隨機(jī)內(nèi)存作為實(shí)例。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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