gpt4 book ai didi

c++ - 为什么编译器不能用文字确定 std::max 的模板?

转载 作者:行者123 更新时间:2023-11-30 01:16:15 25 4
gpt4 key购买 nike

既不是 clang 也不是 gcc,编译这个:

#include <algorithm>
int main()
{
size_t t = 1;
t = std::max(t,0);
}

给出一些味道错误:

error: no matching function for call to 'max(size_t&,int)'
... note: template argument deduction/substitution failed:

如果我明确提供模板类型,它就可以工作:

#include <algorithm>
int main()
{
size_t t = 1;
t = std::max<size_t>(t,0);
}

这很令人困惑,因为如果我将 size_t0 进行比较,编译器都不会发出警告,就像将 size_t 进行比较一样整数。然后我推断编译器可以找出将 0size_t 进行比较是有意义的,那么是什么阻止了编译器找出哪个 max使用?

最佳答案

std::max 只有一个模板参数,用于两个参数。当您在未明确指定该参数的情况下调用该函数时,它会尝试从两个参数中推导出它,最后以 size_t 为一个推导,以 int 为另一个推导(因为它们是两个参数的类型)并且不知道你想要哪一个。

不过,可以肯定的是,Clang 的错误消息在您截断的地方之后的部分正是这样说的。

关于c++ - 为什么编译器不能用文字确定 std::max 的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27004024/

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