【发布时间】:2021-12-01 13:53:42
【问题描述】:
我有一个如下模板函数:
template<typename T>
T foo(byte* &buffer){
...
}
当我尝试使用固定大小的数组访问它时出现错误:
byte buffer[100] = {};
foo<int>(buffer);
但是,当我从缓冲区创建一个新变量并传递它时,没有错误:
byte buffer[100] = {};
auto b = buffer;
foo<int>(b);
buffer 的类型是什么?不是byte*吗?有没有办法将其转换为byte*?这只发生在模板函数中,否则它会按预期工作。
【问题讨论】:
-
在这两个示例中,
buffer的类型为char [100]。无法将数组直接转换为“对字节数组指针的引用”,这是第一个示例尝试执行的操作(并且无效,因为对字节数组指针的引用不能转换为对byte *的引用)。在第二个中,b具有byte *类型,因为发生了“数组到指针”转换(将数组的名称转换为指向其第一个元素的指针)。由于b是byte *,并且不是右值,因此它可以通过非const引用传递给foo()。