如果普通函数调用尚未声明的函数,则会出现编译时错误:
void foo(int x)
{
bar(x); // ERROR: bar has not been declared yet
}
void bar(int x)
{
std::cout << x << '\n';
}
int main()
{
foo(42);
}
解决方法是前向声明被调用的函数,或者切换定义的顺序。
但是,函数模板似乎不需要这些修复:
template<typename T>
void foo(T x)
{
bar(x); // OKAY
}
template<typename T>
void bar(T x)
{
std::cout << x << '\n';
}
int main()
{
foo(42);
}
这编译得很好。这是为什么?当编译器看到bar(x)
时,它为什么不抱怨?
(我正在使用 g++ 4.6.3)