MSDN文章《C++ Type System (Modern C++)》(http://dwz.cn/7f8S2V) 中有量个适合于初学者的概念。拷贝并解释如下:
1. 变量
Variable: The symbolic name of a quantity of data so that the name can be used to access the data it refers to throughout the scope of the code where it is defined. In C++, “variable” is generally used to refer to instances of scalar data types, whereas instances of other types are usually called “objects”.
变量是一些数据的“符号名字”。
......
“变量”通常用于指代标量数据类型的实例。(“scalar data types" 似乎译作”基础数据类型“比较好理解。在Daniel. Liang的《Introduction to Java Programming》教材中有类似说法)
其它类型的实例则通常被称为”对象“
注:变量的类型(type)说明了变量所指代的”一些数据“所占的存储空间(字节数)
2. 类型
C++ is astrongly typedlanguage and it is alsostatically-typed; every object has a type and that type never changes (not to be confused with static data objects).
C++是一种强类型语言,也是一种静态类型语言;
简单理解就是:每个对象都有一个类型并且在对象生存期内类型永远不变。
在C++03标准中,定义每个变量时都要指明它的类型。定义函数时,也要指明函数返回值类型和参数类型。这很麻烦,比如下面的代码:
// 代码1
intx = 0;
boolf(intz = 8) {
if(z > x) return true;
else return false;
}
如果使用动态类型语言Python (最近由于深度学习和人工智能而火上加火的语言)写上面的代码,则是:
# 代码2
x = 0
def f(z = 8):
return True
else:
return False
同样长度的代码,Python可以不用费心考虑变量函数的类型
在C++11中,原本已经几乎没用的关键字 auto被赋予了新的功能:类型推断
// 代码3
autox = 0; //编译器会推断x的类型:根据初值”0“的类型判断x是int类型
autoy; //编译器尝试推断y的类型,但是无法得到类型,会报错
在C++14中,又增加了对函数返回值类型的推断,因此【代码1】就能变成下面的写法:
// 代码4,编译时需设置语言标准选项为c++14
autox = 0;
autof(autoz = 8) {
if(z > x) return true;
else return false;
}
用了3个auto,虽然比代码2还要多敲两下键盘,但是作为程序员的我们就不需要再思考变量类型了,C++长得有点儿像动态类型语言了。
不过,虽然长得有点儿像,但是本质上仍然是静态类型语言,能够在编译期检测出类型不匹配的问题,减少运行时与类型相关的bug。
在本文开头提到的那篇MSDN文章中,还有一些更深的论述,感兴趣的话,去看一看吧。
领取专属 10元无门槛券
私享最新 技术干货