神秘的oneliner模板代码,任何一个?

Ara*_*raK 4 c++ arrays templates metaprogramming

我正在阅读此页面: C++提示:如何获取数组长度.作者提出了一段代码来了解静态数组的大小.

template<typename T, int size>
int GetArrLength(T(&)[size]){return size;} // what does '(&)' mean ?
.
.
.
int arr[17];
int arrSize = GetArrLength(arr); // arrSize = 17
Run Code Online (Sandbox Code Playgroud)

任何人都可以阐明这段代码,因为我无法理解它是如何工作的.

jal*_*alf 7

该函数将reference(&)传递给type T和size 数组size.

  • 将数组传递给函数的唯一方法是作为参考.数组不能通过值传递.如果你尝试,它会衰减到一个指针.如果函数接收到指针,则数组大小信息已丢失.使函数可见大小信息的唯一方法是传递对数组的引用. (3认同)
  • @Goz数组在传递时不会在C/C++中复制,数组的名称是引用.我错了吗 ? (2认同)