我正在读这页: C++ Tip: How To Get Array Length。作者提出了一段代码来了解静态数组的大小。
template<typename T, int size>
int GetArrLength(T(&)[size]){return size;} // what does '(&)' mean ?
.
.
.
int arr[17];
int arrSize = GetArrLength(arr); // arrSize = 17
任何人都可以了解这段代码,因为我无法理解它是如何运作的。
答案 0 :(得分:7)
该函数将引用(&
)传递给类型为T
且大小为size
的数组。
答案 1 :(得分:1)
的sizeof(X)/的sizeof(X [0])
如果数组降级为指针类型,则不会捕获错误,但它仍然会编译!
模板版本是防弹。
答案 2 :(得分:1)
T(&amp;)[size]是对T [size]的引用。如果你不使用引用C ++会将T [size]视为T *,并且函数模板参数推断不起作用。
答案 3 :(得分:0)
基本上是
int arr [17]; int arrSize = GetArrLength(ARR);
创建此功能:
int GetArrLength(int(&amp;)[17]){return 17;}
所以&amp;必须像往常一样意味着引用,所以它引用了数组类型,并且大小(模板中的第二项)就是传入数组的大小。
想想我会坚持旧的
sizeof(x)/sizeof(x[0])