编译期确定
⑴ 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);
