2017-05-23 73 views
1

[dcl.fct.default]/3(重點是我的):我不明白,在[dcl.fct.default]最後一句/ 3

默認參數應的 參數聲明子句中只規定函數聲明或lambda聲明符或模板參數(14.1)中的函數聲明或 ;在後者 的情況下,初始化子句應該是一個賦值表達式。 A 默認參數不應被指定爲參數包。 如果在參數聲明子句中指定了 ,那麼在 參數聲明的聲明符或抽象聲明符中不應出現 。

上面的最後一句說,如果在參數聲明子句指定一個默認參數,應出現說明符或抽象說明符中,參數聲明的吧。然而,當我在看參數聲明的定義,我覺得在[dcl.fct]/3以下(重點是我的):

參數聲明:
       屬性說明符seqopt DECL-specifier- SEQ 聲明符
       屬性說明符-seqopt DECL說明符-SEQ說明符= 初始化子句
       屬性說明符-seqopt DECL說明符-SEQ 抽象declaratoropt
       屬性說明符-seqopt DECL說明符-SEQ 抽象declaratoropt = 初始化子句

回答

2

標準中有一個腳註

102)這意味着默認參數cann OT出現,例如,在指針 聲明來功能,提及的功能,或 typedef聲明

例如這些聲明

void f(void g(int = 10)); 

void (*pf)(int = 10); 

是錯誤的。

+0

我明白了。謝謝。 – Alexander