2015-04-05 53 views
1

在§7/ 9,你会发现一个函数声明的定义:“函数声明”一词在§7/ 9(N4140)中定义,但没有定义为语法生成。为什么?

如果DECL说明符-SEQ不包含的typedef说明符,这个 声明被称为函数声明如果与名称关联的类型 是功能类型(8.3.5)和对象声明 否则。

在§7/ 1,你可以找到语法生产的定义声明,但没有在那里提名函数声明,因为这样定义的一部分。换句话说,如何在C++语法中对function declaration进行分类?

+0

我想说这是'声明'的子分类。它不是一个句法类别,因为短语“功能声明”一般不使用斜体字,与1.6p1相反,这表明定义需要用于说明目的,以便表达不能或不能方便表达的约束作为CFG的一部分。 – rici 2015-04-05 19:22:08

+0

(大多数?)?编程语言的一个重要组成部分是语法不定义语言。与语法不匹配的东西不在语言中(通常可能有例外),但该标准对有效程序的限制超过了语法的限制,甚至可以定义没有显示为条款的术语语法。 – Yakk 2015-04-06 18:29:14

回答

1

距今约初始化声明符这一段谈话,我把它应用到简单声明其中有一个初始化声明符列表。你可以看到这不完全正确

// clearly, this is not the declaration of an object, so it should 
// not be called an "object declaration", but 7p9 does say so 
int &a = x; 

struct A { 
    // AFAICS 7p9 should also apply here, but there is no init-declarator 
    // here, but a member-declarator. 9.2 also doesn't delegate to 7p9. 
    typedef int a; 
}; 

结果是,下面还包含一个函数声明,但该声明不声明函数。

template<typename T> void f(); 

总之,我认为在规范中对此文本有一些解释。

+0

现在我可以清楚地知道'函数声明'是一个'简单声明'。谢谢。 – Leon 2016-05-02 20:26:02

相关问题