我有一个char数组
char theArray[] = { 0xAA, 0x01, 0x27, 0x08 };
我正常传递数组
myFunction(theArray)
但我有其他几个显式数组初始化。当我尝试做一个
myFunction({ 0xAA, 0x01, 0x27, 0x08 })
,
编译器说:
错误:标量初始值设定项中的多余元素
如何直接传递我的显式数组?
答案 0 :(得分:4)
最简单的方法是使用<div text-editordir></div>
代替std::array<unsigned char,4>
数组:
char[]
#include <array>
void myFunction(const std::array<unsigned char,4>& theArray) {
}
int main() {
myFunction({{ 0xAA, 0x01, 0x27, 0x08 }});
myFunction({{ 0xAA, 0x01, 0x27, 0x08 }});
}
?值unsigned char
不适合0xAA
,会出现编译错误。
signed char
?因为您将从初始化列表中获取rvalue,所以只能将其作为const
引用传递,或者复制到by value参数。
答案 1 :(得分:-4)
答案取决于你的意思&#34;直接传递我的显式数组&#34;。
当你说你有一个char数组时:
char theArray[] = { 0xAA, 0x01, 0x27, 0x08 };
您正在声明堆栈上的数组。当它超出范围时,内存被释放。
在函数内部无法分辨内存的分配方式。因此,即使不了解更多关于函数的信息,我们也可以推断,如果你传递char theArray[] = { 0xAA, 0x01, 0x27, 0x08 };
并且函数没有释放内存,那么我们永远不会指望它会通过另一个仍然传递指针的调用来实现。
必须将内存分配给某些内容,并且不允许使用语法myFunction(new char[]{0xAA,0x01,0x27,0x08 });
。
但是如果我们使用智能指针,我们可以做一行:
myFunction(std::unique_ptr<char[]>{new char[4]{0xAA,0x01,0x27,0x08}}.get());