动态、静态语言,强、弱类型语言

动态语言和静态语言

1.动态类型语言:是指在运行期间才去做数据类型检查的语言。在用动态语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言;

2.静态类型语言:与动态类型语言刚好相反,它的数据类型检查发生在在编译阶段,也就是说在写程序时要声明变量的数据类型。C/C++、C#、Java都是静态类型语言的典型代表。



强类型语言和弱类型语言

C++是一门强静态类型的语言.


强类型: 变量/对象一定是有类型的, 且变量/对象的类型一旦确定,其类型不再允许更改,不同类型的变量/对象不允许赋值和初始化.

弱类型:变量/对象的类型概念很弱或者没有类型的概念,不同变量/对象的类型可以更改, 不同类型的变量/对象允许赋值赋值和初始化.

这里需要说明的是强制类型转换,C++的强制类型转换分为显示的和隐式的,C++的强制类型转换用于在不同类型的变量/对象间赋值和初始化,事实上是编译器在中间生成了临时对象,比如typeA a,typeB b,如果a = b合法,一定是存在typeB到typeA的转换,实际上是根据b生成了一个临时对象c(typeA类型),然后a = c.所以依然是同类型对象间的赋值.并不和C++是强类型语言冲突.
并不是强制类型转换一定能成功,关键是看”被转换的类”是否定义了到”目标类”的”转换代码”.这些都是程序员在设计类时自己完成的工作.内置类型的相关转换是已经设计好了的.

变量/对象的类型决定了,变量/对象可以执行的操作,如果某种类型不支持一些操作,则这种类型的变量/对象也不支持这些操作.

静态类型:类型检查在编译时进行. P.S. 编译的时候就知道每一个变量的类型,因为类型错误而不能做的事情是语法错误.因此,在用静态语言编程时,必须事先定义变量/对象的类型,以便让编译器在编译时就知道每个实体的具体类型.

动态类型:类型检查在运行时进行. P.S. 编译的时候不知道每一个变量的类型,因为类型错误而不能做的事情是运行时错误.因此,在用动态语言编程时,不用事先定义变量/对象的类型,该语言会在你第一次给变量/对象赋值时,自动记下它的类型.

你可能感兴趣的:(c/c++,强静态类型,c语言)