簡體   English   中英

逗號作為變量初始化中的分隔符(不作為運算符)

[英]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來按預期進行初始化? 還是我一直在被誤解下苦苦掙扎?

[dcl.decl]/3

聲明中的每個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM