民國108年 第2梯次 電腦軟體設計(C++)乙級 學科
第35題
C++中定義Template 函數如下:下列函數呼叫何者是錯誤?
題目
C++中定義Template 函數如下:下列函數呼叫何者是錯誤?
- (1) int x=3, y =4; cout << larger(x,y);
- (2) f loat x =3, y =4; cout << larger(x,y);
- (3) char x='3', y ='4'; cou t << larger(x,y);
- (4) char x[]="3", y []="4"; c out << larger(x,y);
官方答案
(4) char x[]="3", y []="4"; c out << larger(x,y);
解析
假設 larger 為 template<class T> T larger(T a, T b){ return a>b?a:b; },用來比較兩值大小並回傳較大者。選項1~3 傳入的兩個引數型態一致(int、float、char),樣板可正常推導 T 並編譯。選項4 傳入 char x[]="3" 與 char y[]="4",陣列會退化(decay)為 char* 指標,T 被推導為 char*,此時比較的是兩個字串的記憶體位址而非字元內容,無法正確比較字串大小;若要比較 C 字串應改用 strcmp,或改用 std::string 的 > 運算子。故選項4 的呼叫是錯誤用法。
AI 參考解析(推得答案已與官方答案比對一致),非官方公告內容,僅供備考參考。