请看下面的测试代码:选择具有指针参数
template<class T> struct Wrap {};
template<typename T> inline
void fun (T *&Int) // **choice 1**
{}
template<typename T> inline
void fun (Wrap<T> *&Int) // **choice 2**
{}
int main()
{
int i = 6;
fun((char*&)(i)); // **call 1**
fun((Wrap<char>*&)(i)); // **call 2**
}
当我运行在Linux G ++这段代码,它的工作原理按预期。当使用char * &调用fun()时,它会直接调用choice 1的函数。然而,当我们调用fun()与包装< char> * &并且它调用了选项2时,我感兴趣。尽管选项1和2对于第二次调用都有效,编译器仍然设法选择一些更好的竞争者 - > choice 2(因为它存在)。
问题:是否保证,对于任何其他C++编译器都会保留相同的行为?如果不是,那么是否有其他选择使其具有确定性?
'inline'在模板函数中几乎没有用处。这不是必须的,因为它们是(非专用的)模板,因此不会导致链接器错误,编译器比我们更好地确定何时内联和何时不内...并可能完全忽略您的请求。 – 2011-03-28 09:12:43