int a=b=c=10; //invalid statement
工作,但以下是有效的語句爲什麼右關聯不與聲明語句
int a,b,c;
a=b=c=10;
第一個是無效的爲B分配給一個甚至在B獲得了它的價值。
但第二種情況是有效的,因爲等於(=)符號具有右聯合,即 「=」符號將從右側開始獲得偏好。
我的問題是:爲什麼不在第一種情況下適用右聯盟? 這是否意味着Associativity不適用於聲明聲明? 我需要更清晰。
int a=b=c=10; //invalid statement
工作,但以下是有效的語句爲什麼右關聯不與聲明語句
int a,b,c;
a=b=c=10;
第一個是無效的爲B分配給一個甚至在B獲得了它的價值。
但第二種情況是有效的,因爲等於(=)符號具有右聯合,即 「=」符號將從右側開始獲得偏好。
我的問題是:爲什麼不在第一種情況下適用右聯盟? 這是否意味着Associativity不適用於聲明聲明? 我需要更清晰。
它不起作用,因爲它在語法上不正確。正如你在第二個例子中所展示的,一個類型的多個變量是用逗號作爲分隔符來聲明的。如果代之以b
和c
已經被聲明,那麼事情工作正常。例如這個工程:
int b,c;
int a=b=c=10;
你甚至可以把這種(至少在VS2010編譯)做:
int b,c,a=b=c=10;
提醒你,我會說,看起來BAD,並建議反對。
變量需要先聲明,然後賦值或在表達式中使用。
如果它不只是一個練習,但你已經用真正的編譯器測試過,你可能會給我們更多的信息,實際上什麼不喜歡編譯器。
答案的一部分是注意=
運算符的兩個不同角色。一個是分配,一個是初始化。你的榜樣
int a = b = c = 10;
相當於
int a = (b = (c = 10));
所以在右側的兩個=
的任務,而不是初始化。在一項任務中,左手邊必須明確界定。
它意味着聲明和賦值發生在同一行中的聲明,它期望在之前完成所有變量的聲明。 感謝您的澄清。 – Joe 2010-08-22 17:55:14