?? ?? ?? ?? C++ Primer Plus? 8? ?? 6???.
? ?? ?? ???? ???? ???. ??? int ?? ????? ?? ??? char*[]
int ? double? ???? ??????. ?? ?? ?? ???? ????.
?? ?? ?? ??? ???? ?? ???? ???? ??? ??? ????? ??? ? ??? ??????. ???? ??? ????? ??? ???? ??? ??? ????
????? ??? ????? ???? ? ????
?? ???: main.cpp:43:23: ??: 'const char maxn(const char, int)'? ??? ??? 'maxn<const char []>'? ?? ??? ?? ????? ???? ????< ; >const char maxn<const char[]>(const char* x[], int n)
??:
???擁有18年軟件開發(fā)和IT教學(xué)經(jīng)驗(yàn)。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項(xiàng)目經(jīng)理、高級(jí)軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...
??: template<> const char **maxn(const char **x, int n);
template<> const char **maxn(const char **x, int n);
調(diào)用:cout << "sx[5] max_address: " << (int*)*maxn(sx, 5) << endl;
定義:
template<>
const char **maxn(const char **x, int n)
{
const char **max_len = x;
for (int i = 0; i < n - 1; i++)
max_len = strlen(*max_len) >= strlen(x[i + 1]) ? max_len : &x[i + 1];
return max_len;
}
你犯了三個(gè)錯(cuò)誤:
特化語法不對(duì)
特化時(shí)兩處T的類型不一致
多處指針沒有解引用
思路:
模板聲明:template<typename T> T maxn(T x, int n);
調(diào)用:maxn(sx, 5)
。其中變量sx的類型是const char *[5]
,即數(shù)組類型。
由于sx是數(shù)組類型,模板形式參數(shù)的形式是T
,這里sx會(huì)被隱式轉(zhuǎn)換成指針類型(array to pointer conversion)const char **
,即T是const char **
。
所以特化應(yīng)當(dāng)是template<> const char **maxn(const char **x, int n);
cout << "sx[5] max_address: " << (int*)*maxn(sx, 5) <<
??: ?? ??? ????? ? ?? ??? ??????: ??
template<typename T> T maxn(T x, int n);
maxn(sx, 5)
. ?? sx? ??? ?? ??? const char *[5]
???. ??
??sx? ?? ????? ??? ?? ????? T
?????. ??? sx? ????? ??? ???? ?????(???? ???? ??) const char ** code>, ? T? const char **
???. ??
????? ????
template<> const char **maxn(const char **x, int n);
????? ???.
??PS: ????? ?? ???? ???? ??? ???. ??? T? ?? ??? ??? ? ?? ??? ???? ?? ??? ???? ???? ????. ?? ??? ????? ???? ? ???? ??? ? ????. ??
?? ??? ?? ??? maxn ??? ?? n? ???? "?? ?" ??? ???? ??? ?? ??? ??? ?? ???? ??? ?????.
????? ??? ?? ??? ???? ??????.
?? ??? ?? ??? ???? ??? ?????? ????? vs2017?? ????????.