C ++函数声明

时间:2013-05-20 03:15:16

标签: c++ include

我是C ++的新手。我不明白为什么它是好的(即为什么编译器允许它)1个函数被声明两次。例如,以下代码是合法的:

#include <iostream>
#include <string>

int hello();
int hello();

int main(){
    cout << "hello, world" << endl;
}

int hello(){
    return 1;
}

为什么编译器不抱怨?

2 个答案:

答案 0 :(得分:1)

在C和C ++中,前向声明非常弱。它们为编译器提供了一个正式的“承诺”,即如果具有指定签名的函数出现,它将具有您指定的签名。甚至不保证该函数出现:除非您调用或以其他方式引用声明的函数,否则编译器不会抱怨没有定义的声明。该标准要求编制者将相同的前向声明视为单一声明。

与根据单一定义规则必须唯一的定义不同

  

3.2任何翻译单元不得包含任何变量,函数,类类型,枚举类型或模板的多个定义

声明仅需要引用相同的定义,即相互等同:

  

3.3.4给定同一声明区域中的一组声明,每个声明指定相同的非限定名称,它们都应引用同一实体,或者全部引用函数或函数模板,[...] < / p>

答案 1 :(得分:0)

您的疑问将被“一个定义规则”清除。它在ISO C ++标准(ISO / IEC 14882)2003中的3.2节中定义。

它声明:

  

在任何翻译单元中,模板,类型,功能或对象都可以   只有一个定义。其中一些可以有任意数量   声明。

在维基百科(http://en.wikipedia.org/wiki/One_Definition_Rule

上阅读更多相关信息