如何通过引用传递静态分配的数组?
void foo(int (&myArray)[100])
{
}
int main()
{
int a[100];
foo(a);
}
Run Code Online (Sandbox Code Playgroud)
是否(&myArray)[100]有任何意义或只是通过引用传递任何数组的语法?我不明白单独的括号后跟大括号.谢谢.
我试图将二维数组的引用传递给C++中的函数.我在编译时知道两个维度的大小.这就是我现在所拥有的:
const int board_width = 80;
const int board_height = 80;
void do_something(int[board_width][board_height]& array); //function prototype
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我从g ++中得到这个错误:
error: expected ‘,’ or ‘...’ before ‘*’ token
Run Code Online (Sandbox Code Playgroud)
这个错误意味着什么,我该如何解决?
这只是过去几天困扰我的事情,我认为不可能解决,但我之前看过模板魔术.
开始:
为了获得标准C++数组中的元素数量,我可以使用宏(1)或类型安全的内联函数(2):
(1)
#define sizeof_array(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0]))
Run Code Online (Sandbox Code Playgroud)
(2)
template <typename T>
size_t sizeof_array(const T& ARRAY){
return (sizeof(ARRAY)/sizeof(ARRAY[0]));
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,第一个问题是成为一个宏(目前我认为是一个问题),而另一个问题是在编译时无法获得数组的大小; 即我不能写:
enum ENUM{N=sizeof_array(ARRAY)};
Run Code Online (Sandbox Code Playgroud)
要么
BOOST_STATIC_ASSERT(sizeof_array(ARRAY)==10);// Assuming the size 10..
Run Code Online (Sandbox Code Playgroud)
有谁知道这是否可以解决?
更新:
这个问题是在引入constexpr之前创建的.现在你可以简单地使用:
template <typename T>
constexpr auto sizeof_array(const T& iarray) {
return (sizeof(iarray) / sizeof(iarray[0]));
}
Run Code Online (Sandbox Code Playgroud) 我可以声明:
int (*ap)[N];
那么ap是指向大小为N的int数组的指针.为什么这有用呢?如果我将它传递给函数,它可以用它做什么有用的事情,它只能用一个指向数组内容的普通指针?
C FAQ说:
2.12:如何声明指向数组的指针?
通常,你不想.
将动态大小的数组传递给另一个函数的最"正确"的方法是什么?
bool *used = new bool[length]();
Run Code Online (Sandbox Code Playgroud)
我想出了一些编译的方法,但我不太确定正确的方法是什么.
例如
这些会超过价值吗?
static void test(bool arr[])
static void test(bool *arr)
Run Code Online (Sandbox Code Playgroud)
这个会通过引用传递吗?
static void test(bool *&arr)
Run Code Online (Sandbox Code Playgroud)
谢谢
可能重复:
有关引用数组参数的有用信息是什么?
是
void myFunction( int (&arg)[4] );
Run Code Online (Sandbox Code Playgroud)
和
void myfunction(int arg[4]);
Run Code Online (Sandbox Code Playgroud)
不同?他们有什么不同?先做什么以及如何称呼它?
当您将字符串替代品传递给参数中的函数而不是指向字符数组的指针时,编译器如何管理内存?
例子:
static const char myString[LENGTH] = "A string";
myFunction(myString);
Run Code Online (Sandbox Code Playgroud)
和:
myFunction("A string");
Run Code Online (Sandbox Code Playgroud)
通过指针传递静态常量(很可能存储在 ROM 中)是否会对 RAM 使用产生显着的好处?
当传递字符串文字时,它是否完全复制为局部变量,sizeof(myString)或者编译器“知道”通过引用传递它,因为在 C 中数组总是通过引用传递?
I see one constructor of class so strange:
class HashTable
{
public:
template <int N>
HashTable(const char(&str)[N])
{
}
};
Run Code Online (Sandbox Code Playgroud)
Could you please explain it and some example or give me a related link?
I really don't understand const char(&str)[N].