函数声明但未定义

4
以下代码将编译并且根据cppquiz.org(问题#30)是确定性的。
#include <iostream>
struct X {
  X() { std::cout << "X"; }
};

int main() { X x(); }

程序的输出为空,因为
X x();

是一个函数声明。

但我仍然想知道为什么尽管这个声明从未在任何地方定义,但它仍然可以编译通过?


4
即使你调用了 x,它仍然可以编译通过。但是它无法链接。 - chris
1
因为它也没有被任何地方使用 - David Rodríguez - dribeas
2个回答

6

由于x()从未被调用,因此没有任何要链接的东西,因此链接器不会出现未定义错误。它仅被声明为一个不带参数并返回X的函数:X x();


3

X x(); 这本身是一个声明(原型)而不是函数调用。如果在看到它的声明之前进行了函数调用,那么代码将无法编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接