簡體   English   中英

函數重載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM