【发布时间】:2017-11-27 04:25:31
【问题描述】:
考虑以下简单代码:
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;
}
编译器生成此专用代码的顺序是什么?
例如,我知道如果 U 没有 '+' 运算符,那么代码将无法编译,因此会执行一些成员函数表检查,并在某个时候生成函数签名。
返回类型、参数、操作等是否有特殊的求值顺序?
【问题讨论】:
-
"是否编译正确" 如果编译不正确,则不会进行任何特化。
-
我已调整问题以澄清我的意图。
-
你试过编译你的代码吗?
-
编译器不会从损坏的代码中生成任何东西!
-
我将代码更改为可以编译的代码。现在请考虑实际问题,而不是示例代码。
标签: c++ templates compilation