gpt4 book ai didi

c++ - 模板类型推导执行隐式数组到指针的转换

转载 作者:太空狗 更新时间:2023-10-29 20:02:34 24 4
gpt4 key购买 nike

我已阅读有关此标准转换的现有问题。但是,我没有找到满意的答案。

我有这段代码显示选择了 T* 重载而不是 T&& 重载。据我了解,转发引用重载应该绑定(bind)所有内容,除非另一个重载是完美匹配。

在下面的代码中,tab 是一个char const(&)[4]

有人能给我解释一下为什么要在这里进行数组到指针的转换吗?如果有办法解决该转换,我会洗耳恭听!

(大肠杆菌 link )

#include <utility>

template <typename T>
void f(T&& lol)
{
}

template <typename T>
void f(T* pof)
{
static_assert(sizeof(T) && false, "");
}

template <typename T>
struct S;

int main(int argc, char *argv[])
{
decltype("lol") tab = "lol";
S<decltype(tab)> s;
f("lol");
return 0;
}

最佳答案

数组被推导为 Ptr 类型。

参见 http://en.cppreference.com/w/cpp/language/template_argument_deduction

Before deduction begins, the following adjustments to P and A are made:

1) If P is not a reference type,

a) if A is an array type, A is replaced by the pointer type obtained from array-to-pointer conversion;

b) otherwise, if A is a function type, A is replaced by the pointer type obtained from function-to-pointer conversion;

c)otherwise, if A is a cv-qualified type, the top-level cv-qualifiers are ignored for deduction

关于c++ - 模板类型推导执行隐式数组到指针的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39227637/

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