第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++中函數(shù)模板怎么用?

C++中函數(shù)模板怎么用?

Cats萌萌 2019-02-05 14:06:26
為什么下面的沒法運行啊,怎么改。( //表示系統(tǒng)報的錯誤)#include<iostream>using namespace std;template<typename T>; //syntax error : '<end Parse>'T max(T a,T b,T c){ //missing ';' before '{'if(b>a) a=b;if(c>a) a=c;return a;}int main(){int i1=8,i2=5,i3=6,i;double d1=56.9,d2=90.765,d3=43.1,d;long g1=67843,g2=-456,g3=78123,g;i=max(i1,i2,i3); //'i' : undeclared identifier // 'max' : undeclared identifier d=max(d1,d2,d3); //'d' : undeclared identifier // 'max' : undeclared identifierg=max(g1,g2,g3); //'g' : undeclared identifier // 'max' : undeclared identifiercout<<"i_max="<<i<<endl;cout<<"d_max="<<d<<endl;cout<<"g_max="<<g<<endl;return 0;}
查看完整描述

3 回答

?
九州編程

TA貢獻1785條經(jīng)驗 獲得超4個贊

很不好意思,Java的特性比C++少得多。Java不支持模板。只支持很少的類似于C++模板的語法來實現(xiàn)很有限的泛型編程。

Java對泛型編程的支持也是最近才加進去的,而且支持的很不好。你就不用指望能像C++那樣用它了。

Java是一個非常純粹的OOP語言,它天生就是相對動態(tài)的、后期的,編譯期處理的信息非常少,這和C++強靜態(tài)的特性是完全相反的。

Java的絕大部分類型信息都屬于RTTI,也就是在運行時動態(tài)獲取,不像C++是在編譯期由編譯器推導(dǎo)的,所以Java基本上不可能支持C++那樣靈活的模板。

Java的泛型也是,說白了只是個障眼法,用類似C++那樣的模板語法來包裝了其面向?qū)ο髣討B(tài)cast的本質(zhì)而已。
舉例說,java中的Vector<int>,你給里面保存int的時候,每一個int都是先被包裝成一個Integer對象然后塞進去,取出來的時候是先取出Object對象,轉(zhuǎn)換成Integer對象,然后再從里面取出int這個整數(shù),繞了很大一個彎子。
雖然從代碼上寫的和C++差不多都很簡潔,但是實際的效率和C++差了n個數(shù)量級。這點上實在是比較惡心,C#都做得比它好,C#至少對于值類型還是會實例化代碼的。

Java天生就是一個鼓勵動態(tài)化、運行期化、OOP化的一個語言,所以它不適合使用C++中那些泛型編程的范式來設(shè)計程序。你如果能夠忍受Java的裝箱拆箱的巨大效率損失,你可以用OOP的方式來實現(xiàn)那種同一個函數(shù)服務(wù)多種類型的想法,但是的確很低效。



查看完整回答
反對 回復(fù) 2019-03-20
?
富國滬深

TA貢獻1790條經(jīng)驗 獲得超9個贊

template<typename T>; 去掉分號
i=max(i1,i2,i3); 改成i=max<int>(i1, i2, i3)
d=max(d1,d2,d3); 改成max<double>
g=max(g1,g2,g3); 改成max<long>

查看完整回答
反對 回復(fù) 2019-03-20
  • 3 回答
  • 0 關(guān)注
  • 675 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號