讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

AniShort
AniShort

AI短剧协同制作平台

c++编译期和运行期的区别 c++程序生命周期【核心】

千晨同学_1787

千晨同学_1787

发布时间:2026-01-08 16:48:03

|

147人浏览过

|

来源于php中文网

原创

编译期是代码转化为机器指令的预审阶段,由编译器执行宏展开、模板实例化等静态操作;运行期是程序加载执行阶段,涉及内存分配、动态绑定等实际运行行为。

c++编译期和运行期的区别 c++程序生命周期【核心】

编译期和运行期是 C++ 程序生命周期中两个本质不同的阶段,区分它们的关键在于:谁在执行、做什么事、能访问什么资源、出错时如何反馈。

编译期:代码变成机器指令的“预审”阶段

编译期指从源码(.cpp/.h)经预处理、词法/语法分析、语义检查、优化,最终生成目标文件(.o/.obj)的过程,由编译器(如 clang、g++)主导。此时程序尚未运行,没有栈、堆、全局变量的实际内存,也没有 CPU 指令执行流。

  • 做的事包括:宏展开、模板实例化、constexpr 计算、static_assert 断言、类型推导(auto/decltype)、内联函数展开、常量折叠
  • 能用的只有编译器已知的静态信息:字面量、类型定义、模板参数、constexpr 表达式结果
  • 典型错误如:类型不匹配、未定义标识符、static_assert 失败、模板参数无法推导——这些直接导致编译失败,不生成可执行文件
  • 例子:constexpr int x = 2 + 3; 中的 2 + 3 在编译期就算出结果 5;template<int n> struct Array { int data[N]; };</int> 中的 N 必须是编译期常量

运行期:程序真正“活起来”的执行阶段

运行期指可执行文件被操作系统加载进内存、CPU 开始逐条执行指令的过程。此时有真实的内存布局(栈帧、堆区、数据段)、运行时类型信息(RTTI)、异常处理机制、动态链接等。

  • 做的事包括:变量初始化(非 constexpr 的)、new/malloc 分配内存、函数调用(含虚函数动态绑定)、throw/catch 异常、读写文件、网络通信
  • 能访问的是运行时才确定的值:用户输入、随机数、系统时间、指针解引用结果、多态对象的实际类型
  • 典型错误如:空指针解引用、数组越界、除零、内存泄漏、std::bad_cast——这些不会阻止编译,但会导致程序崩溃或行为未定义
  • 例子:int x = rand(); 的值只能在运行期确定;Base* p = new Derived(); p->foo(); 中调用哪个 foo 由运行时对象实际类型决定

关键分水岭:什么能在编译期决定?

核心判断标准是「是否依赖运行时状态」。C++11 起引入 constexpr、C++14 放宽限制、C++17 加入 if constexpr、C++20 引入 consteval,都是为了把更多逻辑前移到编译期。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

立即学习“C++免费学习笔记(深入)”;

  • 编译期友好:字面量、枚举值、constexpr 函数/变量、模板非类型参数、std::array 大小、std::is_same_v<t u></t> 等类型特征
  • 运行期专属:dynamic_cast、typeid、new 表达式、std::vector 容量、std::string 内容、任何涉及 I/O 或系统调用的操作
  • 模糊地带需注意:lambda 默认捕获([=])不能用于编译期上下文;constexpr 函数体内若含运行期分支(如普通 if),整个调用仍可能退化为运行期执行

程序生命周期主线:从源码到进程结束

C++ 程序完整生命周期包含四个紧密衔接的阶段,编译期和运行期分别覆盖其中一部分:

  • 预处理期(属编译前期):处理 #include、#define、#ifdef,生成纯文本翻译单元
  • 编译期(狭义):翻译单元 → 汇编代码 → 目标文件(.o),完成语法/语义检查与优化
  • 链接期(编译后、运行前):合并多个 .o 和库,解析符号引用,生成可执行文件(ELF/PE)
  • 运行期:OS 加载程序,初始化全局对象(构造函数)、进入 main()、执行用户逻辑、调用 exit() 或返回、析构全局对象、释放资源

其中,编译期和链接期统称「构建期(build time)」,运行期也叫「执行期(execution time)」。理解这个链条,才能准确判断某段逻辑该放在哪一阶段、用什么语言特性表达最安全高效。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7439

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6364

2023.10.24

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

313

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

619

2023.10.11

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

375

2025.11.27

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

17820

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1263

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

9570

2025.06.11

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Postman安装指南
Postman安装指南

共0课时 | 0人学习

Docker Desktop设置与维护手册
Docker Desktop设置与维护手册

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn