模板专业化如何工作?

时间:2017-06-23 14:33:13

标签: c++ templates compilation

考虑以下简单代码:

template<typename U>
U foo(U a, U b){
    //we don't really care about the body
    return a + b;
}

和实例化:

int a = foo(1, 2);

据我所知,编译时,foo是专用的,编译器会生成:

int foo(int a, int b){
    //we don't really care about the body
    return a + b;
}

编译器生成此专用代码的顺序是什么?

例如,我知道如果你没有&#39; +&#39;运算符,然后代码将不会编译,因此执行一些成员函数表检查,并在某个时刻生成函数签名。

是否有要评估的返回类型,参数,操作等的特殊顺序?

1 个答案:

答案 0 :(得分:1)

这不是专业化,这是实例化。

模板分两次管理。

第一个几乎是句法的;编译器只是验证代码是否正确。

然后当你使用给定或推断类型的模板(instanciate it)时,它会尝试生成代码(如果尚未完成),所以当它遇到a+b时,它只是试图找到合适的运算符对于涉及的类型。如果未找到,则会发出错误,否则会发出代码(最终可能会发生其他一些错误)。