未使用的類會不會編譯
Ⅰ C#緙栬瘧鍣ㄦ槸濡備綍鍒ゅ畾鏌愪釜鍙橀噺娌℃湁浣跨敤榪囩殑錛熼夯鐑﹀憡璇夋垜
榪欐槸鎴戜滑鏌愪釜緇勫憳鍦ㄧ紪紼嬭繃紼嬩腑鎻愬嚭鐨勭枒闂銆傚洜涓鴻繖涓緙栬瘧閿欒寰堝規槗閬垮厤錛屾墍浠ユ垜涓鐩翠篃娌℃湁浠旂粏鎯寵繃榪欎釜闂棰橈紝鐩村埌鐪嬭繃浠栫殑浠g爜鍚庢墠鎰忚瘑鍒幫紝姝ら棶棰樺苟涓嶆槸閭d箞綆鍗曠殑銆傚厛鐪嬬湅榪欐典唬鐮侊細浠g爜
class PRogram{static void Main(string[] args){byte[] buf = new byte[1024];
T t = new T();
string str = "1234";
int n = 1234;
int? nn = 1234;
DateTime dt = DateTime.Now;
object o = 1234; Console.WriteLine("finish");}}class T { } 浣犺夊緱榪欐典唬鐮侀噷鏈夊嚑涓鍙橀噺娌℃湁浣跨敤榪囧憿錛熷傛灉浠庣▼搴忓憳鐨勮掑害鏉ョ湅錛岀瓟妗堝簲璇ユ槸鎵鏈夊彉閲忛兘娌℃湁浣跨敤榪囥備絾緙栬瘧鍣ㄧ粰鍑虹殑緇撴灉鍗存湁鐐硅繚鍙嶇洿瑙夛細鍙橀噺鈥渟tr鈥濆凡璧嬪礆紝浣嗗叾鍊間粠鏈浣跨敤榪
鍙橀噺鈥渘鈥濆凡璧嬪礆紝浣嗗叾鍊間粠鏈浣跨敤榪
byte[] buf2 = new byte[1024]; // 娌℃湁璀﹀憡 榪欎釜緇撴灉浼間箮琛ㄦ槑錛屽傛灉鍙傛暟璧嬪間負null錛岄偅涔堢紪璇戝櫒騫朵笉浼氱湡鐨勬墽琛岃祴鍊礆紝騫朵笖鍙橀噺浼氬綋浣滄病鏈変嬌鐢ㄨ繃銆傜敤IL媯鏌ョ殑緇撴灉涔熷彲浠ヨ瘉鏄庢よ存硶錛氬圭涓琛岋紝緙栬瘧鍣ㄦ病鏈夌敓鎴愪換浣曞瑰簲鐨勮鍙ワ紱瀵圭浜屾潯鍒欎嬌鐢ㄤ簡newattr鎸囦護鏉ュ壋寤烘暟緇勩傚逛簬鑷瀹氫箟鐨勭被錛歍 t1 = null; // 鏈夎﹀憡
T t2 = new T(); // 娌℃湁璀﹀憡 榪欎釜緇撴灉搴斿綋鏄鍙浠ョ悊瑙g殑錛堝敖綆″彲浠ョ悊瑙o紝浣嗘垜璁や負騫朵笉濂斤紝鐞嗙敱瑙佸悗錛夈傝櫧鐒舵垜浠騫舵病鏈夎皟鐢ㄨョ被鐨勪換浣曟柟娉曪紝浣嗘槸綾葷殑鏋勯犲嚱鏁頒粛鐒跺彲鑳芥墽琛屾煇浜涙搷浣滐紝鎵浠ュ彧瑕佸壋寤轟簡涓涓綾伙紝緙栬瘧鍣ㄥ氨浼氭妸瀹冨綋浣滃凡緇忎嬌鐢ㄨ繃鐨勩傚逛簬鍩烘湰鍊肩被鍨嬶紝鍏惰〃鐜板拰寮曠敤綾誨瀷鍙堟湁鎵涓嶅悓錛岀紪璇戝櫒騫朵笉鎶婂垵濮嬭祴鍊煎綋浣滃瑰彉閲忕殑浣跨敤錛歩nt n1 = 0; // 鏈夎﹀憡
int n2 = 1234; // 鏈夎﹀憡
int? n3 = null; // 鏈夎﹀憡
int? n4 = 0; // 鏈夎﹀憡
int? n5 = 1234; // 鏈夎﹀憡 string浠庡疄鐜頒笂鏉ヨ村簲褰撶畻鏄寮曠敤綾誨瀷錛屼絾琛ㄧ幇涓婂嵈鏇村姞綾諱技浜庡肩被鍨嬶紝璀﹀憡淇℃伅涔熷拰鍊肩被鍨嬬浉鍚屻傚逛簬紼嶅井澶嶆潅涓浜涚殑鍊肩被鍨嬶紝緇撴灉鏈夌偣寰濡欙細DateTime dt1; // 鏈夎﹀憡
DateTime dt2 = new DateTime(); // 鏈夎﹀憡
DateTime dt3 = new DateTime(2009,1,1); // 娌℃湁璀﹀憡
DateTime dt4 = DateTime.Now; // 娌℃湁璀﹀憡 榪欎釜緇撴灉鏈変竴鐐規槸闇瑕佹敞鎰忕殑銆傚敖綆DateTime鐨勯粯璁ゆ瀯閫犲嚱鏁板拰甯﹀弬鏋勯犲嚱鏁頒粠鐢ㄦ埛瑙掑害鐪嬪悓鏍鋒槸鏋勯犲嚱鏁幫紝浣嗗湪緙栬瘧鍣ㄧ殑瑙掑害鏉ョ湅鍗存槸涓嶄竴鏍風殑銆傜敤IL鍙嶇紪璇戜篃鍙浠ョ湅鍑猴紝濡傛灉璋冪敤榛樿ゆ瀯閫犲嚱鏁扮殑璇濓紝閭d箞緙栬瘧鍣ㄨ皟鐢ㄧ殑鏄痠nitobj鎸囦護錛岃屽瑰甫鍙傛瀯閫犲嚱鏁拌皟鐢ㄧ殑鍒欐槸call ctor鎸囦護銆傛ゅ栵紝灝界′粠紼嬪簭鍛樼殑瑙掑害鏉ョ湅璧嬪間唬鐮佺殑鏍煎紡鏄瀹屽叏鐩稿悓鐨勶紝浣嗙紪璇戝櫒鍗翠細鏍規嵁鎵璧嬬殑鍊間笉鍚岃岄噰鍙栦笉鍚岀殑鏋勯犵瓥鐣ワ紝榪欎篃鏄姣旇緝榪濆弽鐩磋夌殑銆傛渶鍚庣殑緇撹烘瘮杈冮仐鎲撅紝閭e氨鏄疌#鐨勭紪璇戣﹀憡騫朵笉瓚充互緇欎簣紼嬪簭鍛樿凍澶熺殑淇濇姢錛岀壒鍒鏄瀵逛簬鏁扮粍錛
byte[] buf = new byte[1024];
濡傛灉浠呮瀯閫犺繖鏍蜂竴涓鏁扮粍鑰屾病鏈変嬌鐢ㄧ殑璇濓紝閭d箞緙栬瘧鍣ㄥ苟涓嶄細緇欎簣紼嬪簭鍛樹換浣曡﹀憡淇℃伅銆傚彟澶栦竴涓闂棰樹篃鏄鍊煎緱鑰冭檻鐨勶紝澹版槑涓涓綾昏屼笉浣跨敤浠諱綍鏂規硶錛屾瘮濡備粎浠
鎴戜釜浜虹殑鐪嬫硶鏄錛屼粠浣跨敤鐨勮掑害鏉ヨ達紝榪欐槸涓嶅悎鐞嗙殑錛屽簲褰撳敖閲忛伩鍏嶏紝緙栬瘧鍣ㄥ彂鐜版ょ敤娉曠殑璇濆簲璇ユ彁鍑鴻﹀憡銆傚傛灉紜瀹炴湁闇瑕佺殑璇濓紝鍙浠ラ氳繃緙栬瘧鎸囦護鎴朅ttribute鐨勬柟娉曟潵鐗瑰埆澹版槑鏉ラ伩鍏嶈﹀憡淇℃伅銆傜劧鑰孋#緙栬瘧鍣ㄧ殑琛屼負鍗存槸涓嶅彂鍑鴻﹀憡錛岃繖涓鐐規垜鏄涓嶈ゅ悓鐨勩傚綋鐒訛紝鎴戜篃甯屾湜澶у舵彁鍑鴻嚜宸辯殑鎯蟲硶銆
Ⅱ C++ VS2010編譯器報錯:未專用化的類模板不能用模板變數
呃, 好多錯誤...
const ID_ id 中的 const 會被編譯器忽略掉, 可以不寫(這個不算錯誤).
這是一個最基本的Error: 類定義 後面 要有 ; 結尾.
ID_ 既然是 int 的 alias, 那 類C 就是一個 非類型實參的類模板. 也就是說, C<> 的 <> 中應該是個 int的數字, 不能是 int 或者 ID_, 或者 其它類型.
對於 C++98 C++03 而言, vector<C<5> > 中最後面的 兩個 大於號之間 必須要有至少一個空格. 這是語法規定. 除非你的編譯器支持 C++11, 而且你在編譯的時候 指定了編譯選項
-std=c++14
或者
-std=c++11
最後, 一個修改後的版本:
#include<vector>
typedefintID_;
template<ID_id>
classC
{
public:
voidsay(){};
};
//typedefstd::vector<C>CVec;//報錯
//typedefstd::vector<C<ID_>>CVec;//報錯
//typedefstd::vector<C<int>>CVec;//報錯
typedefstd::vector<C<1>>CVec;//注意:這三個是不同的類型
typedefstd::vector<C<2>>CVec;//注意:這三個是不同的類型
typedefstd::vector<C<999>>CVec;//注意:這三個是不同的類型
intmain()
{
CVecvec;
return0;
}
最最後, 歡迎交流. :)
Ⅲ C語言中已經聲明或定義的變數如果在代碼中沒有使用到,編譯器會怎樣處理
就一直在那裡放著。如果是全局變數,編譯器連提示都沒有;若是局部變數編譯器在編譯時會提醒說某某局部變數沒有使用;若你不理會,在代碼修改前就不會再提醒了。這些變數未使用,卻一直佔用著內存空間,但不影響代碼的正確性……