在C++中多次声明函数和变量

Kus*_*ali 6 c++ declaration definition one-definition-rule

在C++中,多次声明变量会在编译期间显示错误.例如:

int x;
int x;
Run Code Online (Sandbox Code Playgroud)

在多次声明函数时,编译期间不会显示任何错误.例如:

int add(int, int);
int add(int, int);
Run Code Online (Sandbox Code Playgroud)

为什么在C++中有这种区别?

son*_*yao 14

注意,这int x;不是(仅)声明,它的定义.因此,由于ODR被违反而出现错误,即在一个翻译单元中仅允许一个定义.

变量声明可以写成:

// a declaration with an extern storage class specifier and without an initializer
extern int x;
extern int x;
Run Code Online (Sandbox Code Playgroud)

在此期间int add(int, int);,确切地说是一个声明(功能).一个翻译单元中的多个声明很好,不会违反ODR.

  • 您可能想继续说明一下,声明“ int add(int int)”不是定义,因此ODR不适用。 (2认同)