gpt4 book ai didi

c++ - std::basic_string 作为函数模板的参数不能从 const char* 推导出

转载 作者:行者123 更新时间:2023-12-01 14:18:11 38 4
gpt4 key购买 nike

为什么放std::basic_string作为函数模板的参数将无法从 const char* 推导出来,但是直接构造就可以推导出成功?

#include <string>
#include <iostream>
template<class Char/*, class Traits, class Allocator*/>
//^doesn't matter whether the second and third template parameter is specified
void printString(std::basic_string<Char/*, Traits, Allocator*/> s)
{
std::cout << s;
}
int main()
{
printString("hello"); //nope
std::basic_string s{ "hello" };//works
}
我找到了一个相关的帖子 here ,但答案并没有解释背后的原因

最佳答案

因为在 template argument deduction 中不考虑隐式转换(从 const char*std::basic_string<char> ) , 无法推导出模板参数 Char .

Type deduction does not consider implicit conversions (other than type adjustments listed above): that's the job for overload resolution, which happens later.


您可以明确指定模板参数,
printString<char>("hello");
或通过 std::basic_string明确地。
printString(std::basic_string("hello"));

关于c++ - std::basic_string 作为函数模板的参数不能从 const char* 推导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63333338/

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