gpt4 book ai didi

c++ - 使用模板获取数组的大小和结束地址

转载 作者:搜寻专家 更新时间:2023-10-31 00:21:50 25 4
gpt4 key购买 nike

您可以使用模板来查找数组的长度。

template<typename T, size_t N>
size_t arraylen( T(&)[N] )
{ return N; }

我想将这个想法更进一步。

struct Foo
{
template< typename T, size_t N >
Foo( /* ??? */ ) : ptr(?), size(?) { }

char* ptr;
size_t size;
};

int main()
{
Foo foo("test");

const char bar[] = "test2";
Foo foo2(bar);

const char* baz = bar;
Foo foo3(baz); // compiler error.
}

但是,对于我的一生来说,我无法获得要编译的语法。我认为我遗漏的部分原因是我并不真正理解 T(&)[N] 的含义。

T(&)[N] 是什么意思?

如何允许访问数组的地址,同时仍然使用模板获取数组的大小?

最佳答案

struct Foo
{
template< typename T, size_t N >
Foo(T(&array)[N]) : ptr(array), size(N) { }

const char* ptr;
size_t size;
};

array 是对 N 个 T 数组的引用。原代码也是如此,只是参数没有命名。

但这实际上并不是在编译时计算地址。如果你仔细想想,你会发现这是不可能的。如果堆栈地址是固定的,递归(和许多其他算法)将永远无法工作。

注意最后一行:

Foo foo3(baz);

仍然无法工作,因为 baz 是一个指针而不是数组。

关于c++ - 使用模板获取数组的大小和结束地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4073276/

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