[英]Function overloading
我找到了這個代碼,我不確定是否應該發生重載。
void print( int (*arr)[6], int size );
void print( int (*arr)[5], int size );
如果我將指針傳遞給4個元素的數組會發生什么,它應該來...
任何線程都會有所幫助。
將發生重載,並將指針傳遞給4 int
的數組將不匹配任何一個函數。 如果你把它們寫成等效的形式,它會更清楚:
void print( int arr[][6], int size );
void print( int arr[][5], int size );
N×4數組可以衰減為指向4 int
數組的指針。 眾所周知,具有不同第二維度的2D陣列是不兼容的。
KennyTM的答案是正確的。 不過,這是一個額外的想法,基於你的問題帶有C++
標簽的事實。 在C ++中,您可以使用具有非類型參數的模板來查找數組維:
#include <iostream>
template< std::size_t N >
void print(int (&arr)[N]) {std::cout << N << '\n';}
int main()
{
int arr[6];
print(arr);
return 0;
}
調用將是模糊的,因為兩個重載都不能轉換為int (*arr)[4]
。 您需要顯式傳入5或6個元素的元素。
VS2008給出:
error C2665: 'print' : none of the 2 overloads could convert all the argument types
(2088): could be 'void print(int (*)[5],int)'
(2093): or 'void print(int (*)[6],int)'
while trying to match the argument list '(int (*)[4], int)'
希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.