静态类型 动态类型

zhulinjia 2008-10-21 05:46:44
基类类型引用和指针的关键点在于静态类型和动态类型可能不同

一直不懂下面的:

静态类型

动态类型

是怎么区分的.

在问一个. 在编译程序时,到底都做了一些什么.
...全文
317 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-10-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chlaws 的回复:]
一个编译时分配存储,一个是运行时分配存储
所属的内存区域也不同,一个是在静态存储区,一个是在堆栈
[/Quote]

这好像不大对,堆和栈可不是一码事儿!
linhong835 2008-10-21
  • 打赏
  • 举报
回复
总体来说,C/C++源代码要经过:预处理、编译、汇编和连接四步才能变成相应平台下的可执行文件。大多数时候,程序员通过一个命令就能完成上述四个步骤。关于更详细的说明,可以去http://www.xxlinux.com/linux/article/development/soft/20070424/8267.html看一下。
linhong835 2008-10-21
  • 打赏
  • 举报
回复

1.表达式的静态类型是指不考虑程序的执行语义,而仅从程序分析所得到的结果类型。表达式的静态类型只依赖于它所处的程序,在程序运行时不会改变。
2. 左值表达式的动态类型是指其在类的继承关系中的最底层派生类(the most derived object)的类型;
右值表达式的动态类型是它的静态类型。


帅得不敢出门 2008-10-21
  • 打赏
  • 举报
回复
看下RTTI
就拿调用指针或者引用指向的对象来说吧
要调用它们的一个virtual function 要到运行期才知道要调用哪个类的function
linhong835 2008-10-21
  • 打赏
  • 举报
回复
C++ 标准明确定义:
1.3.3 dynamic type [defns.dynamic.type]
the type of the most derived object (1.8) to which the lvalue denoted by an lvalue expression refers.
The dynamic type of an rvalue expression is its static type.
动态类型的定义是:由一个左值表达式指出的左值的动态类型,是其所引用的对象的最狭义类型。一个右值表达式的动态类型,就是它的静态类型。

1.3.11 static type [defns.static.type]
the type of an expression (3.9), which type results from analysis of the program without considering execution semantics. The static type of an expression depends only on the form of the program in which the expression appears, and does not change while the program is executing.
静态类型,是指不需要考虑表达式的执行期语义,仅从表达式的字面的形式就能够决定的类型。静态类型在程序运行时不会改变。

通常我们说,“基类指针指向的对象的实际/真正类型”或“基类引用所引用的对象的实际/真正类型”,就是它们的动态类型。很显然,这个动态类型是 C++ 语言通过指针和引用实现运行时多态能力的核心概念。

本文来自: 乘风原创程序(http://www.qqcf.com) 详细出处参考:http://study.qqcf.com/web/530/121922.htm
jqx_ah 2008-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhulinjia 的回复:]
静态类型: 在编译时可知是引用类型或针指类型 .他是怎么知道的呢?有什么特点
动态类型: 指针或引用绑定的对象的类型,这是仅在运行时要可知的.(这个也不太明白)

编译器知道怎么区分. 可是我不明白啊.
[/Quote]

编译原理 LZ去了解下吧
zhulinjia 2008-10-21
  • 打赏
  • 举报
回复
静态类型: 在编译时可知是引用类型或针指类型 . 他是怎么知道的呢?有什么特点
动态类型: 指针或引用绑定的对象的类型,这是仅在运行时要可知的.(这个也不太明白)

编译器知道怎么区分. 可是我不明白啊.
chlaws 2008-10-21
  • 打赏
  • 举报
回复
一个编译时分配存储,一个是运行时分配存储
所属的内存区域也不同,一个是在静态存储区,一个是在堆栈

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧