gpt4 book ai didi

c++ - 整数和 const char[N] 上的模板未编译(无法推断模板参数 'N' )

转载 作者:太空狗 更新时间:2023-10-29 23:52:32 25 4
gpt4 key购买 nike

为什么编译器无法在以下代码中推断模板参数?我该如何修复代码?我希望添加尽可能低的运行时开销。

#include <iostream>

using namespace std;

struct Test
{
template<int N>
Test(const char data[N]) :
data(data),
size(N)
{}

const char *data;
int size;
};

int main()
{
Test test("Foobar");
return 0;
}

我尽量使代码片段尽可能小且易于阅读。

正回复更新:

这个解释来自Tales of C++ K-ballo可能有用:

Lvalue transformations, applied when an lvalue argument is used in context where an rvalue is expected. Those transformations are lvalue to rvalue conversion, array to pointer conversion, and function to pointer conversion. This is the type conversion applied to all function arguments when passed by value, and it is customary referred to as argument decay.

最佳答案

您需要通过引用接受参数:

Test(const char (&data)[N] ) 

现在 N 将被推断。

在你的例子中,参数被值接受,这导致数组在传递给构造函数时衰减到指向数组第一个元素的指针。

关于c++ - 整数和 const char[N] 上的模板未编译(无法推断模板参数 'N' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15314259/

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