除法舍入規(guī)則
對于模數(shù)運(yùn)算符,如果m和n是整數(shù)且n非零谐宙,則(m / n) * n + m % n
等于m掰邢。這也暗示著如果m % n
非零,則它具有與m相同的符號丙唧。早期版本的語言允許m % n
在-(m / n)
從零四舍五入的實(shí)現(xiàn)中具有與n相同的符號愈魏,但現(xiàn)在此類實(shí)現(xiàn)已經(jīng)被禁止。此外想际,除了-m
溢出的情況(- m) / n
和m / (-n)
總是等于-(m / n)
培漏,m % (-n)
等于m % n
,并且(-m) % n
等于-(m % n)
胡本。更具體地:
Code:
21 % 6; /* result is 3 */ 21 / 6; /* result is 3 */
21 % 7; /* result is 0 */ 21 / 7; /* result is 3 */
-21 % -8; /* result is -5 */ -21 / -8; /* result is 2 */
21 % -5; /* result is 1 */ 21 / -5; /* result is -4 */
使用初始化列表進(jìn)行賦值
新標(biāo)準(zhǔn)下牌柄,我們可以在賦值語句的等號右端使用已經(jīng)寫好的初始化器列表進(jìn)行賦值:
Code:
k = {3.14}; // error: narrowing conversion
vector<int> vi; // initially empty
vi = {0,1,2,3,4,5,6,7,8,9}; // vi now has ten elements, values 0 through 9
如果賦值語句的等號左側(cè)操作數(shù)是內(nèi)置類型,則初始化器列表最多可包含一個(gè)值侧甫,而且該值不得進(jìn)行縮小轉(zhuǎn)換珊佣。
對于類類型蹋宦,這樣的賦值方式會(huì)發(fā)生什么取決于類定義時(shí)的詳細(xì)信息。以vector為例咒锻,vector模板重載了賦值運(yùn)算符冷冗,定義了自己的賦值運(yùn)算符版本,該版本中允許以初始化器列表進(jìn)行賦值運(yùn)算惑艇。該運(yùn)算符將等號左側(cè)的元素替換為右側(cè)列表中的元素蒿辙。
無論等號左側(cè)操作數(shù)的類型如何,初始化器列表都可以為空滨巴。在這種情況下思灌,編譯器生成一個(gè)臨時(shí)值,并將該值賦給左側(cè)操作數(shù)兢卵。
對類成員使用sizeof
sizeof
運(yùn)算符返回表達(dá)式或類型名稱的大邢肮濉(以字節(jié)為單位)。運(yùn)算符是右向關(guān)聯(lián)的秽荤。sizeof
的結(jié)果是size_t
類型的常量表達(dá)式甜奄。
在新標(biāo)準(zhǔn)下,我們可以使用范圍運(yùn)算符來獲得類類型成員的大小窃款。 通常我們只能通過一個(gè)類類型的對象來訪問類的成員课兄。 使用sizeof
時(shí)我們不需要提供一個(gè)類的對象,因?yàn)?code>sizeof不需要獲取類的成員就可以知道其大小晨继。
應(yīng)用sizeof
的結(jié)果一定程度上取決于所涉及的類型:
-
sizeof char
或?qū)σ粋€(gè)char
類型的表達(dá)式應(yīng)用sizeof
結(jié)果為1烟阐。 - 對一個(gè)引用類型使用
sizeof
返回引用類型的對象的大小。 - 對一個(gè)指針使用
sizeof
返回持有該指針?biāo)枰目臻g大小紊扬。 - 對一個(gè)解指針對象(例:
(*p)
)使用sizeof
返回該指針指向的類型的對象的大醒亚选;該指針不必有效餐屎。 - 對一個(gè)數(shù)組使用
sizeof
將返回整個(gè)數(shù)組的大小檀葛。它等價(jià)于將元素類型的大小乘以數(shù)組中元素的數(shù)量。請注意腹缩,sizeof
操作不會(huì)將數(shù)組轉(zhuǎn)換為指針屿聋。 - 對
string
或vector
使用sizeof
只返回這些類型對象的固定部分的大小(fixed size);它不返回對象元素使用的大小藏鹊。
Code:
Sales_data data, *p; // Sales_data is a class
sizeof(Sales_data); // size required to hold an object of type Sales_data
sizeof data; // size of data's type, i.e., sizeof(Sales_data)
sizeof p; // size of a pointer
sizeof *p; // size of the type to which p points, i.e., sizeof(Sales_data)
sizeof data.revenue; // size of the type of Sales_data's revenue member
sizeof Sales_data::revenue; // alternative way to get the size of revenue
因?yàn)?code>sizeof返回整個(gè)數(shù)組的大小润讥,所以我們可以通過將數(shù)組大小除以元素類型大小來確定數(shù)組中元素的數(shù)量:
Code:
// sizeof(ia)/sizeof(*ia) returns the number of elements in ia
constexpr size_t sz = sizeof(ia)/sizeof(*ia);
int arr2[sz]; // ok sizeof returns a constant expression
因?yàn)?code>sizeof返回的結(jié)果是一個(gè)常量表達(dá)式,所以我們可以使用sizeof
表達(dá)式的結(jié)果來指定數(shù)組的維度盘寡。
參考文獻(xiàn)
[1] Lippman S B , Josée Lajoie, Moo B E . C++ Primer (5th Edition)[J]. 2013.