2012-10-30 75 views
3
double x = 0,1; 

不能編譯(在MSVC9.0上嘗試)。該錯誤是爲什麼double x = 0,1;沒有編譯?

C2059 syntax error : 'constant' 

意識到有一個逗號出現,而不是一個點,但不應線以上被解釋爲以下?

double x = (0,1); //which is double x = 1; 

順便說一下,初始化用括號編譯成功。

我在想operator ,的優先級低於operator =,但在這種情況下,=是沒有運營商,所以這不應該是一個問題。什麼語法規則確定

double x = 0,1; 

應該是非法的?

+0

難道這不就是因爲通常你有'double x = 0,y;'? – Nabb

+0

有趣的問題,最初我認爲它也應該編譯。 :) –

+0

請注意,如果你寫'double(x)(1),y;'這是一個有效的聲明,但也可以解析爲一個表達式。 –

回答

7

在聲明過程中,括號不存在時的逗號被視爲聲明之間的分隔符。例如:

double x = 0, y = 1; 

double x = 0, y; 

您鍵入什麼是

double x = 0; 
double 1; 

相當於這顯然是不正確的。

11

那麼,它會被視爲

double x = 0; double 1; 

這就是原因。就像你會寫

double x = 0, y; 

這是一個爲聲明的語法,你只是試圖聲明1作爲變量(這是錯誤的)。不要以爲還有更多...

相關問題