高质量程序设计指南c++/c语言(15)–编译时和运行时的不同

我们把编译预处理器、编译器和连接器工作的阶段合成“编译时”。语言中有些构造仅仅在编译时起作用,而有些构造是在“运行时”起作用的,分清楚这些构造对于程序设计很重要。例如,预编译伪指令、类定义、外部对象声明、函数原型、标识符、各种修饰符号(const、static)及类成员的访问说明符和连接规范、调用规范等,仅在编译器进行语法检查、语义检查和生成目标文件及连接的时候起作用的,可在执行程序中不存在这些东西。容器越界访问、虚函数动态决议、函数动态连接、动态内存分配、异常处理和RTTI则是在运行时才会出现和发挥作用的。举两个例子:

(1)

#include<iostream>
using namespace std;

int main(void)
{
    int *pInt = new int[10];
    pInt += 100;   
    cout << *pInt << endl;
    *pInt = 1000;

    return 0;
}

编译绝对没问题,但是运行时可能发生悲剧。

(2)

#include<iostream>
using namespace std;

class Base
{
public:
    virtual void f()
    {
        cout << "Base::f" << endl;
    }
};

class Derived:public Base
{
private:
    virtual void f()
    {
        cout << "Derived::f" << endl;
    }
};

int main(void)
{
    Base *p = new Derived;
    p->f();

    return 0;
}

编译时和运行时都没有出错,但是却违背了private的用意。
原文链接: https://www.cnblogs.com/zzj3/archive/2013/04/27/3048092.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/86210

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午10:26
下一篇 2023年2月9日 下午10:26

相关推荐