2016-12-01 45 views
1

下面你會發現語法生產類頭的定義[class]/1C++語法的生產:類頭

類頭:
   類的關鍵字屬性符-seq 選擇類頭名 類的virt-符選擇基本條款選擇
   類的關鍵字屬性符-SEQ 選擇 基本條款選擇

在段落的末尾,你會發現以下內容:

一個類說明符class-head省略了class-name-name 定義了一個未命名的類。 [注意:一個未命名的類因此不能是 最後的。末端注]

從上面的,據我瞭解,名爲類語法,即用類頭名一類,是由上面的第一定義,和語法給定一個未命名的類由第二個定義給出。

一個簡單的問題:會不會有可能通過第一個通過簡單地用類頭名選擇它代替類頭名來取代上述兩種定義,?

或者更清楚。對於以下內容,將不可能用class-head替換上面的定義嗎?

類頭:
   類的關鍵字屬性符-SEQ 選擇類頭名選擇類的virt-符選擇基本條款選擇

+1

那麼你會如何指定*類的virt-符*必須省略時*班級名稱*不存在? – Praetorian

+0

@Praetorian這就是本段末尾所示句子中提到的情況。 Note明確指出_class-virt-specifier_在這種情況下無效。 –

+0

@JoãoAfonso筆記是非規範的。 – 0x499602D2

回答

5

號如果你沒有,那麼就不會有歧義。 class final可能意味着所謂final一個名爲類或使用final作爲虛擬符一個無名類。

由於語法是如何定義的,因此class final總是意味着一個名爲final的類。語法是毫不含糊的。括號內的符號不是規範性文字;它只是解釋了兩個定義的原因

現在,你可以定義語法以不同的方式來達到同樣的效果,通過添加另一種說法:

類頭:

   類的關鍵字屬性specifier-序列選擇類的頭名,東西選擇基本條款選擇

類頭名-東西:

   類頭名類的virt-符選擇

+0

你是說我的問題**結尾的_class-head_的定義是有效的**,如果規範是用'寫入一個未命名的類,因此不能是final.'而不是'[注意:未命名的類因此不能是最終的。 - 結束]'? –

+0

@JoãoAfonso:規範性文本可以用來確定什麼模棱兩可的語法意味着什麼,但該特定的聲明不會真的這樣做。你必須以不同的方式說同樣的話。坦率地說,讓語法毫不含糊是比較容易的。 –

0

你不能這樣做

類頭:
類的關鍵字屬性符-SEQ 選擇類頭名選擇類的virt-符選擇基本條款選擇

,因爲這將允許類頭

類鍵類的virt說明符

未由原始允許的。

0

沒有,因爲那將有可能省去類頭名同時還指定類的virt-符

類的virt-符語法是:

類的virt-符
   最終

正如你提到的,無名類不能final