gpt4 book ai didi

c++ - 未调用更具体的重载

转载 作者:IT老高 更新时间:2023-10-28 22:38:54 25 4
gpt4 key购买 nike

鉴于以下两个函数,如果我将第一个重载传递给 std::pair<const char*, std::size_t>,我希望它会被调用。 ,因为它比通用的 T 更具体.

void foo(const std::pair<const char*, std::size_t>& p)
{
std::cout << "pair" << std::endl;
}

template <class T>
void foo(const T& v)
{
std::cout << "generic" << std::endl;
}

int main()
{
const char* s = "abc";
foo(std::make_pair(s, std::size_t(3)));
}

但是,这个程序输出:

generic

为什么要调用第二个重载,而不是显式采用 pair 的重载?

这是编译器问题吗?我碰巧正在使用一个相当老的编译器(GCC 4.1.2)。

嗯...这可能是编译器问题:

http://ideone.com/97XwwZ

最佳答案

您的编译器肯定有错误。它是什么错误,只是推测,但你是正确的,这段代码应该给出更具体的输出。样本不够大或不够复杂,不足以导致任何更微妙的规则成为原因。

关于c++ - 未调用更具体的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18133173/

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