根据cppquiz.org(问题#30)
,以下代码将编译并具有确定性#include <iostream>
struct X {
X() { std::cout << "X"; }
};
int main() { X x(); }
程序的输出无效,如
X x();
是一个函数声明。
但我仍然想知道为什么这个编译虽然这个声明从未在任何地方定义过?
答案 0 :(得分:4)
由于永远不会调用x()
,因此没有任何内容可以链接,因此链接器没有错误,因为它没有定义。它只被声明为不带参数的函数,并返回X
:X x();
。
答案 1 :(得分:2)
X x();
本身是一个声明(原型),而不是函数调用。如果在查看其声明之前进行了函数调用,那么它将无法编译。