2011-07-11 52 views
0

雖然我一直在尋找在庫的代碼,我發現下面的線這是C++中的有效賦值嗎?

int number = config.nodes,i,fanout=numP/2; 

我認爲配置是一個指針的東西,但是能有在聲明中逗號?並做出這樣的任務?

+0

查看@ als的答案在這裏:http://stackoverflow.com/questions/6502819/comma-operator-and-comma-seperator-in-c –

回答

8

這聲明瞭三個變量。這是一樣的:

int number = config.nodes 
int i; 
int fanout = numP/2; 

請注意逗號在聲明(和參數列表)特殊處理的,C++也有其不被這裏使用的「逗號操作符」。

+2

它也很容易與逗號操作符混淆,所以我不會建議這樣做。我個人只是在最後一次聲明宣佈時做一個初始任務。 – bdonlan

+0

@bdonlan:有趣的是,我如何提出一個提及逗號運算符(通過對比)的想法可能會有所幫助。 –

+1

我個人只在每個陳述中做一個聲明。節省人們來這裏問「WTF?」。 :-) –

1

這是有效的,號碼沒有被分配你看到的整條線。

ifanout是另外兩個當時正在創建的整數,此時fanout也正在初始化。

這一行等同於:

int number = config.nodes; 
int i; 
int fanout = numP/2; 
+3

該死......我遲到了56秒纔回答這個問題。 haha –

1

它基本上很多聲明:

int number = config.nodes; 
    int i; 
    int fanout=numP/2; 
0

更可識別的方式來寫,這將是:

int number, i, fanout; 
number = config.nodes; 
fanout = numP/2; 

我個人從不寫出類似於你的例子的東西,因爲讀者需要花費很長時間才能確定什麼是g正在上演。

+3

對於普通的'int'來說並不重要,但是你的變體使用了賦值而不是初始化。 –

0

我有以下的添加:

1)空白總是由C++編譯器忽略。所以,

int number = config.nodes,i,fanout=numP/2; 

相當於

// declaring three variables number, i and fanout 
int number=config.nodes, i, fanout = numP/2; 

這裏的逗號是告訴編譯器,我有多個變量來聲明。所以,號碼將被config.nodes初始化。如果config是一個指針(如上所述),那麼您不能使用.運算符訪問成員變量。您必須使用->而不是.

2)下面的行具有不同的語義:

// only one variable will be declared, which is number 
int number = (config.nodes,i,fanout=numP/2); 

括號內是表達,這裏的逗號是逗號運算。在這種情況下,之前定義了config,i,fanoutnumP。逗號運算符的值是最後一個表達式fanout=numP/2的值。