MSDN 文章《C++ 类型系统(现代 C++)》() 有一些适合初学者的概念。 复制解释如下:
1.变量
变量:大量数据的符号名称,以便该名称可用于在定义它的整个代码范围内访问它所引用的数据。 在 C++ 中,“变量”通常用于指代标量数据类型的实例,而其他类型的实例通常称为“对象”。
变量是某些数据的“符号名称”。
……
“变量”通常用于指代标量数据类型的实例。 (“标量数据类型”好像翻译成“基本数据类型”比较好理解,在大牛梁的《Java程序设计入门》教材中也有类似的说法)
其他类型的实例通常被称为“对象”
注:变量的类型(type)表示该变量引用的“一些数据”所占用的存储空间(字节数)
2.类型
C++ 是一种强类型语言,也是静态类型的; 每个对象都有一个类型,并且该类型永远不会改变(不要与静态数据对象混淆)。
C++ 是一种强类型语言,也是一种静态类型语言;
简单的理解就是:每个对象都有一个类型,在对象的生命周期中,类型永远不会改变。
在 C++03 标准中,必须定义每个变量以指示其类型。 在定义函数时,还需要指定函数的返回值类型和参数类型。 这样比较麻烦c++好玩的代码,比如下面的代码:
//代码1
整数 = 0;
布尔 f(int z = 8){
如果(z > x)返回真;
否则返回假;
}
如果上面的代码是用动态类型语言 Python(一种最近受到深度学习和人工智能推动的语言)编写的,它将是:
# 代码 2
x = 0
def f(z = 8):
如果 z > x:
返回真
别的:
返回假
同样的代码长度,Python可以懒得去考虑变量函数的类型
在C++11中c++好玩的代码,几乎无用的关键字auto被赋予了新的功能:类型推断
// 代码 3
autox = 0; //编译器会推断x的类型:根据初始值“0”的类型,判断x是int类型
自动; //编译器试图推导出y的类型,但是得不到类型,会报错
在C++14中,增加了函数返回值类型的推断,所以【代码1】可以写成如下:
// 代码4,编译时语言标准选项需要设置为c++14
汽车 x = 0;
自动 f(自动 z = 8){
如果(z > x)返回真;
否则返回假;
}
使用3个autos,虽然比code 2多了两次击键,但是作为程序员,我们不需要再考虑变量类型了。 C++ 看起来有点像动态类型语言。
不过,虽然看起来有点相似,但本质上还是一门静态类型语言,可以在编译时检测类型不匹配问题,减少运行时类型相关的bug。
在本文开头提到的MSDN文章中,有一些比较深入的讨论。 如果您有兴趣,请看一看。