您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++11怎么將sizeof用于類成員”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++11怎么將sizeof用于類成員”吧!
sizeof運算符
sizeof運算符返回表達式或者類型所占內(nèi)存空間的字節(jié)數(shù)。它返回一個size_t類型的常量表達式。
假設(shè)有下面的結(jié)構(gòu)體:
struct Point3d{
int x;
int y;
int z;
};
可以這樣進行初始化:
Point3d pt;
memset(&pt, 0, sizeof(pt));
也可以這樣初始化:
Point3d pt1;
memset(&pt1, 0, sizeof(Point3d));
也可以批量初始化:
Point3d ptarray[100];
memset(ptarray, 0, sizeof(ptarray));
許多和內(nèi)存操作相關(guān)的處理都需要知道數(shù)據(jù)或類型占用內(nèi)存空間的大小。這時就可以使用sizeof運算符。sizeof計算的對象可以是數(shù)據(jù),也可以是類型。
有一點需要注意的是,如果運算的對象是指針,那么取得的就只能是指針本身的大小而不是指針指向數(shù)據(jù)的大小。例如下面的代碼就不能初始化所有的x數(shù)組元素。
int x[10];
int *p = x;
memset(p, 0, sizeof(p)/sizeof(*p));
C++中的sizeof
假設(shè)有如下結(jié)構(gòu)體:
struct Image{
int width;
int height;
char data[10000];
};
可以這樣初始化data成員:
Image image1;
memset(image1.data, 0, sizeof(iamge1.data));
C++11以后,也可以這樣初始化:
Image image1;
memset(image1.data, 0, sizeof(Image::data));
注意sizeof的的參數(shù),可以不通過對象,直接使用作用域運算符來獲取成員的大小。
小測驗
下面的代碼有問題么?
int data[100];
constexpr size_t cnt = sizeof(data)/sizeof(*data);
int info[cnt * 2];
msmet(info, 0, sizeof(info));
感謝各位的閱讀,以上就是“C++11怎么將sizeof用于類成員”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C++11怎么將sizeof用于類成員這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。