[英]Comma as separator in variable initialization (not as operator)
這似乎是一個簡單的問題,但我已經很久沒有以我自己的風格檢查過......當初始化用逗號分隔的變量時,我假設以下是不安全的做法:
unsigned int n = foo.size, nxn = n * n;
因為我從來沒有真正將逗號運算符用於語法糖等; 而是表明兩個表達式是獨立的 - 作為對“細粒度並行性”(或表達式獨立性)的一種隱含評論,這通常會使代碼更簡潔,例如,
if (<some condition>)
a = true, b = value;
而不是分號分隔的表達式需要{}
范圍。
但我的問題實際上是重新檢查變量初始化案例。 我的假設是否不正確,不能依賴nxn
來按預期進行初始化? 還是我一直在被誤解下苦苦掙扎?
聲明中的每個init-declarator都被單獨分析,就好像它本身在聲明中一樣。 [...]
我們明白了
unsigned int n = foo.size, nxn = n * n;
是相同的
unsigned int n = foo.size;
unsigned int nxn = n * n;
有一個注釋,其中包含其他規則(如auto
或名稱隱藏類型)的例外情況,但在這種情況下不適用。
如果您將多個變量放在一行上,請務必小心使用指針
int * foo, bar;
沒有給你兩個指針。 相反, foo
是一個指針,而bar
是一個int
。 你需要
int * foo, * bar;
得到兩個指針。 出於這個原因,我更喜歡使用
int * foo;
int * bar;
並為安全起見支付額外的鑰匙扣。
nxn
將被正確初始化,因為n
已在定義nxn
的位置定義和初始化。
然而,為了清楚起見,最好將變量放在單獨的行上。 這樣做可以避免歧義,讓閱讀您的代碼的任何人都更清楚您的意圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.