2013-05-20 190 views
3

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

#include <iostream> 
#include <string> 

int hello(); 
int hello(); 

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

int hello(){ 
    return 1; 
} 

为什么编译器不会抱怨?

+1

它可以被声明为许多只要你想要的时间。否则,不同的标题不能很好地结合在一起。 – chris

回答

1

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

不像必须根据单一的定义规则

3.2无翻译单元应包含任何变量,函数,类型,枚举类型,或模板

的多个定义是唯一的定义

声明仅仅需要来指代相同的定义,即,是彼此相等:

3.3.4给定一组的decla口粮在相同的陈述区域,每一个都指定相同的非限定名称,它们应该都指同一个实体,或者全部指的是功能或功能模板,[...]

0

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

它指出:

在任何翻译单元,模板,类型,功能,或者对象可以 具有不超过一个定义的更多。其中一些可以有任何数量的 声明。

了解更多关于它的维基百科(http://en.wikipedia.org/wiki/One_Definition_Rule