【C++再学习】【08】编译时与运行时

来源:互联网 发布:知乎 雷洋 编辑:程序博客网 时间:2024/06/10 10:56

(一)首先来看看const常量相关的编译时与运行时:C++ const常量不同于有些语言,可以是编译时常量,也可以是运行时常量。

int func(){  int x=0,y=1;  return x+y;}int main(){  const int i = 0;  int * p = (int *)&i;  *p =1;  int j = *p;   const int k = func();  cout<<"i="<<i<<" j="<<j<<" k="<<k<<endl;  return 0;}
    运行结果


      上边代码中指针pconst常量i的地址相同,通过p改变了该地址的值,但是从输出结果可以看到i仍然是0j成为1,这就是所谓的编译时常量,程序在编译时都已经将i替换为0,所以后续运行时的改变不会影响i的输出,这也是编译器优化技术中的常量折叠:在编译阶段,对该变量进行值替换,同时,该常量拥有自己的内存空间,并非像宏定义一样不分配空间;而另一个k则是运行时常量,因为k的值只用在执行了函数func()之后才能得到。


(二)再来看看跟多态相关的编译时与运行时:C++中多态分为两种,编译时多态和运行时多态,编译时多态主要指函数重载以及运算符重载等,而运行时多态主要指通过指针或引用调用虚函数达到动态绑定。注意运行时的多态只能通过虚函数的继承以及指针或者引用去调用才会实现,普通的函数、对象而不是指针或引用调用将不会起作用。


0 0
原创粉丝点击