首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C+类型系统的有趣进化

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文章中,还有一些更深的论述,感兴趣的话,去看一看吧。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180113G0O7V900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券