雖然我一直在尋找在庫的代碼,我發現下面的線這是C++中的有效賦值嗎?
int number = config.nodes,i,fanout=numP/2;
我認爲配置是一個指針的東西,但是能有在聲明中逗號?並做出這樣的任務?
雖然我一直在尋找在庫的代碼,我發現下面的線這是C++中的有效賦值嗎?
int number = config.nodes,i,fanout=numP/2;
我認爲配置是一個指針的東西,但是能有在聲明中逗號?並做出這樣的任務?
這聲明瞭三個變量。這是一樣的:
int number = config.nodes
int i;
int fanout = numP/2;
請注意逗號在聲明(和參數列表)特殊處理的,C++也有其不被這裏使用的「逗號操作符」。
它也很容易與逗號操作符混淆,所以我不會建議這樣做。我個人只是在最後一次聲明宣佈時做一個初始任務。 – bdonlan
@bdonlan:有趣的是,我如何提出一個提及逗號運算符(通過對比)的想法可能會有所幫助。 –
我個人只在每個陳述中做一個聲明。節省人們來這裏問「WTF?」。 :-) –
這是有效的,號碼沒有被分配你看到的整條線。
i
和fanout
是另外兩個當時正在創建的整數,此時fanout
也正在初始化。
這一行等同於:
int number = config.nodes;
int i;
int fanout = numP/2;
該死......我遲到了56秒纔回答這個問題。 haha –
它基本上很多聲明:
int number = config.nodes;
int i;
int fanout=numP/2;
更可識別的方式來寫,這將是:
int number, i, fanout;
number = config.nodes;
fanout = numP/2;
我個人從不寫出類似於你的例子的東西,因爲讀者需要花費很長時間才能確定什麼是g正在上演。
對於普通的'int'來說並不重要,但是你的變體使用了賦值而不是初始化。 –
我有以下的添加:
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
,fanout
和numP
。逗號運算符的值是最後一個表達式fanout=numP/2
的值。
查看@ als的答案在這裏:http://stackoverflow.com/questions/6502819/comma-operator-and-comma-seperator-in-c –