考虑这个函数模板:
template<typename T>
unsigned long f(void *) { return 0;}
f<A>
现在,我将和的地址打印f<B>
为:
std::cout << (void*)f<A> << std::endl;
std::cout << (void*)f<B> << std::endl;
如果在 MSVS10 中编译,为什么它们会打印相同的地址?它们不是两个不同的功能,因此应该打印不同的地址吗?
更新:
我意识到在ideone上,它会打印不同的地址。MSVS10 优化了代码,因为函数不依赖T
于任何方式,所以它产生相同的函数。@Mark 对此的回答和评论很有价值。:-)