2017-08-30 10 views
2

我是C++的新手,虽然编程经验很少,但想知道在定义中是否包含关键字在全球范围内达成共识。如果我在头文件中有关键字的声明,我应该在定义本身中包含相同的关键字吗?

例如(不是一个有效的声明,但为例):

class Dog : Animal { 
    void foo() const override final foo bar ... keywords; 
} 

难道是一般建议(为了清楚起见)做的定义是相同的,或者我应该只是离开他们了吗?

Dog::foo() const override final foo bar ... keywords { 
    // 
} 

如果包含在声明中,是否有任何关键字必须包含在定义中?

+8

取决于关键字。如果您省略'const',则不会定义您声明的同一个函数。更不用说其他人在课外定义中不被允许。 [请选择一本好书](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – StoryTeller

+0

谢谢!我没有意识到这一点。这是唯一的主要例外吗?会看看这本书的主题,但发现他们对我而言或者是初学者,或者是对我来说太高级了。 :( –

+0

定义需要包含足够的信息(类名称,函数名称,返回类型,参数类型,const限定符,异常说明等),以便定义与声明相匹配。标识符,而不是关键字,除此之外,你的问题还不清楚。 – Peter

回答

2

答案取决于具体的关键字。

由于StoryTeller在评论中注意到,const部分的功能签名。具有const的声明和不声明两个不同函数的声明(以及重载解析将决定在给定表达式中将使用哪个声明)。这同样适用于volatile。因此,您将必须也在定义中使用它,以便声明和定义可以匹配。

virtual不能在构件定义中使用,并且这同样适用于overridefinal。这些关键字不会影响功能签名

所以,没有必要达成共识,因为它不是主观的。有两条硬性规则,这两条规则的一个原因。

相关问题