gpt4 book ai didi

c++ - 为什么两个函数有相同的地址?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:48 26 4
gpt4 key购买 nike

考虑这个函数模板:

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 对此的回答和评论很有值(value)。 :-)

最佳答案

您需要转换为 void * :

std::cout << (void*)(ftype*)f<A> << std::endl;
std::cout << (void*)(ftype*)f<B> << std::endl;

如果转换为函数指针(或其他几个类的非空指针),它将被解释为 bool通过 operator<<对于 std::ostream (因此是 1 )。

关于c++ - 为什么两个函数有相同的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9323273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com