gpt4 book ai didi

c++ - 数组类型的模板代码中如何计算 std::size_t

转载 作者:行者123 更新时间:2023-11-27 22:38:11 24 4
gpt4 key购买 nike

我正在阅读C++ 模板 - 完整指南,第 2 版 这本书,并从中获取了如下所示的代码:-

template<typename T>
void showVal(const T &arg1, const T &arg2)
{
std::cout << arg1 << arg2;
}

int main() {
showVal("hello", "world1");
return 0;
}

上面的代码给了我这个错误:- “error C2782: 'void showVal(const T &,const T &)': template parameter 'T' is ambiguous”。这是合理的,因为我传递的参数被推断为 const char[6] 和 const char[7]。为了解决这个问题,我对函数进行了更改,更改后看起来像这样:-

template<typename T, std::size_t L1, std::size_t L2>
void showVal(const T (&arg1)[L1], const T(& arg2)[L2])
{
std::cout << arg1 << arg2;
}

PS:- 我从书中得到了这个修复

主要的混淆在于 L1 和 L2 的值。编译器如何知道它必须将 6 和 7 传递给模板参数 L1 和 L2。数组类型是否有任何规则。

最佳答案

"hello" 的类型是const char[6] ,如您第一次尝试的错误消息所示。数组的长度是6。正如你所看到的,数组的长度是数组类型的一部分。由于编译器必须知道类型,因此它也隐含地知道长度。

就像模板类型参数T被推断为 const char基于传递给非模板参数的表达式类型 arg1arg2 (这些类型是 const char[6]const char[7] ),模板非类型参数也是 L1L2是从那些相同的参数类型推导出来的。

关于c++ - 数组类型的模板代码中如何计算 std::size_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51593862/

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