2010-08-22 48 views
6
int a=b=c=10; //invalid statement 

工作,但以下是有效的語句爲什麼右關聯不與聲明語句

int a,b,c; 
a=b=c=10; 

第一個是無效的爲B分配給一個甚至在B獲得了它的價值。

但第二種情況是有效的,因爲等於(=)符號具有右聯合,即 「=」符號將從右側開始獲得偏好。

我的問題是:爲什麼不在第一種情況下適用右聯盟? 這是否意味着Associativity不適用於聲明聲明? 我需要更清晰。

回答

8

它不起作用,因爲它在語法上不正確。正如你在第二個例子中所展示的,一個類型的多個變量是用逗號作爲分隔符來聲明的。如果代之以bc已經被聲明,那麼事情工作正常。例如這個工程:

int b,c; 
int a=b=c=10; 

你甚至可以把這種(至少在VS2010編譯)做:

int b,c,a=b=c=10; 

提醒你,我會說,看起來BAD,並建議反對。

+0

它意味着聲明和賦值發生在同一行中的聲明,它期望在之前完成所有變量的聲明。 感謝您的澄清。 – Joe 2010-08-22 17:55:14

0

變量需要先聲明,然後賦值或在表達式中使用。

4

如果它不只是一個練習,但你已經用真正的編譯器測試過,你可能會給我們更多的信息,實際上什麼不喜歡編譯器。

答案的一部分是注意=運算符的兩個不同角色。一個是分配,一個是初始化。你的榜樣

int a = b = c = 10; 

相當於

int a = (b = (c = 10)); 

所以在右側的兩個=的任務,而不是初始化。在一項任務中,左手邊必須明確界定。

相關問題