c++静态类 C++类型系统的有趣进化

MSDN文章《C++ Type System (Modern C++)》() 中有量个适合于初学者的概念。拷贝并解释如下:

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;

bool f(int z = 8) {

if(z > x) return true;

else return false;

}

如果使用动态类型语言Python (最近由于深度学习和人工智能而火上加火的语言)写上面的代码,则是:

# 代码2

x = 0

def f(z = 8):

if z > x:

return True

else:

return False

同样长度的代码,Python可以不用费心考虑变量函数的类型

在C++11中c++静态类,原本已经几乎没用的关键字 auto被赋予了新的功能:类型推断

// 代码3

autox = 0; //编译器会推断x的类型:根据初值”0“的类型判断x是int类型

auto y; //编译器尝试推断y的类型,但是无法得到类型,会报错

在C++14中,又增加了对函数返回值类型的推断,因此【代码1】就能变成下面的写法:

// 代码4,编译时需设置语言标准选项为c++14

auto x = 0;

auto f(auto z = 8) {

if(z > x) return true;

else return false;

}

用了3个auto,虽然比代码2还要多敲两下键盘,但是作为程序员的我们就不需要再思考变量类型了,C++长得有点儿像动态类型语言了。

不过,虽然长得有点儿像,但是本质上仍然是静态类型语言,能够在编译期检测出类型不匹配的问题,减少运行时与类型相关的bug。

在本文开头提到的那篇MSDN文章中c++静态类,还有一些更深的论述,感兴趣的话,去看一看吧。

———END———
限 时 特 惠:本站每日持续更新海量各大内部创业教程,一年会员只需128元,全站资源免费下载点击查看详情
站 长 微 信:jiumai99

滚动至顶部