編譯期確定
⑴ c++ 數組大小必須在編譯時確定 請教
不一定的啊。
如果是動態分配的數組就可以在運行的時候再確定大小。
比如
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int size,inx;
cout<<"input mem size:"<<endl;
cin>>size;
int *p = new int[size];
memset(p,0x00, sizeof(int) * size);
for (inx=0; inx!=size; ++inx) p[inx]= inx+1;
for (inx=0; inx!=size; ++inx) cout<<p[inx]<<"\t"<<endl;
return 0;
}
⑵ 虛函數調用為什麼不能在編譯時確定
在編譯的時候編譯器並不知道用戶選擇的是哪種類型的對象。,如果不是虛函數,則採用早綁定,函數體與函數調用在程序運行之前就綁定了.當函數聲明為虛函數時,,編譯器通過創建一個虛函數表存放虛函數的地址,在運行時,通過基類指針做虛函數調用時,編譯器靜態的插入能取得這個虛函數指針並在虛函數表中找到正確的函數版本.
⑶ 編譯原理:靜態數組的存儲空間可以在編譯時確定。這句話為什麼是錯的。請給出詳細原因,謝謝。
靜態數組指的是寫代碼期間就知道大小的數組,比如int a[10];
char s[] = "hello";
這個靜態和動態分配相區別,不要和static弄混了,static/extern/auto是用於說明變數的存儲方式——也就是說,靜態數組也可以是static的,也可以是extern的,也可以是auto的。
舉個例子,下面就是一個靜態數組,但是存儲方式是auto的。
voidtest()
{
inta[10];
}
這個數組的存儲空間無法在編譯時候確定,只能在運行期間確定,原因是:盡管可以確定數組的大小,但是不能確定它的首地址。
再比如:
static int sa[10] = {0};
這個數組的存儲空間在編譯時,就可以確定了。
⑷ java 中的編譯期常量是什麼使用它又什麼風險
編譯期常量就是所謂的 public final static 常量。
由於在編譯時就確定了值,在使用的場合會直接寫成值。而不是直接到原來的類中讀取。
這樣會有一個問題。 如果 類 A 提供了常量 類B使用了常量。並都進行了編譯。
然後,修改了類A的源碼,調用系統進行編譯。
系統發現類A是新的代碼,編譯了,類B是舊的代碼,就不進行編譯,使用舊的類。
由於類B中直接編譯進了舊的值,導致類A的修改無法反映到類B中。
這樣造成了風險。
⑸ 什麼叫編碼期,編譯期,運行期在各個期間都做了什麼
編碼期就是編寫代碼,代碼這時為文本狀態,編譯期即將文本代碼轉換為中間碼的過程,運行期就是執行程序。
⑹ java中編譯期常量所指的是什麼
classInitalizedClass{
static{
System.out.println("!");
}
publicstaticintinititalize_varible=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.inititalize_varible);
}
}上面的結果是:
!
1
classInitalizedClass{
static{
System.out.println("!");
}
//和上面的例子唯一的差異就是此處的變數INITIALIZED_VARIBLE被聲明為final
_VARIBLE=1;
}
{
publicstaticvoidmain(String[]args){
System.out.println(InitalizedClass.INITIALIZED_VARIBLE);
}
}
上面的結果是:
1
為什麼兩個例子執行結果不一樣,原因是第二個例子中的INITIALIZED_VARIBLE為編譯期常量,它不會導致類的初始化的
⑺ 如何理解編譯期和運行期的概念
編譯執行是把源代碼進行詞法、語法分析,生成目的代碼後,再執行解釋執行是把源代碼分段(也可能是一條語句)讀入內存執行,然後再讀入下一條語句編譯執行,經過第一次編譯後,再執行效率比較高解釋執行,每次執行效率應該相同,或者說相差無幾
⑻ 在Java中,共有多少種方法可以用來判斷兩個對象相等有具體的實現代碼是最好的!
您好,提問者:
用if(xxx1.equals(xxx2))判斷。。。。是判斷的是兩個對象所指向的內容是否相等!
⑼ java中在編譯期就被確定是什麼意思
我的理解是:編譯器運行的東東是代碼是否否何規范,類似於你寫個void寫錯了寫成vod這時編譯器就會報錯提醒你;
而運行期運行的就是代碼的邏輯關系了,比如說你使用一個數組,未對他進行初始化分配空間,運行時就會出現空指針異常。
理解的較淺,不知能否幫到你。
⑽ visual studio 如何在編譯期確定字串長度,特殊宏之類的
宏的作用,只是在編譯期間完成替代,並不能實現計算。因此不要考慮宏實現,這個沒什麼可行性。
編譯期間數值確定,其實可以通過const關鍵字實現,但說實話,這個是「消耗空間換時間」,如果有log的函數太多,太分散,並不值得。
如果log比較集中的在幾個函數中,那麼可以這么做:
constintfnamelen=strlen(__FUNCTION_);這樣,因為編譯之後__FUNCTION_是一個常量,const 變數會直接從編譯器的符號表中取值(這個叫C++的常量折疊),不會反復計算。
log(__FUNCTION_,fanmelen);
