迟到的C++程序设计语言

C/C++ 2014年12月05日

笔记总是要记的,就胡乱的写在这里吧!计划将这个笔记持续的更新下去!目前没有什么条理,以后在整理吧!

没有任何一个重要程序是只用某种赤裸裸的程序设计语言写出的。

类型和声明

如果你的程序是成功的,那么它就很可能需要移植,而这时某些人必须去寻找并纠正那些依赖于实现的特征了。

在C++程序里,每个名字都有一个与之相关联的类型,这个类型决定了可以对这个名字应用什么操作,并决定这些操作将如何做出解释。

char类型变量是有符号、没有符号由实现决定(未定义)。

unsigned整数类型对于将存储看做是二进制位数组的使用方式非常适合。如果采用unsigned而不使用int以便多获得一位表示正整数,可能因为参数运算的数据有负数而得到意外的结果。

类型void是一个语法上的基本类型。没有类型为void的对象,被用作指向不明类型的对象的指针的基础类型。

静态对象:全局的、名字空间的、局部静态的变量。

对象(广义):存储的一片连续区域。

左值:引用某个对象的表达式。

指针、数组与结构

指针的实现是希望直接映射到机器上的地址机制。许多机器是字节寻址方式,故一个bool量最少也要占据char那么大的空间。想更紧凑的使用地址可以使用按位逻辑操作或者结构中的位域操作

数组:初始化列表里的元素太少,剩余的元素会被初始化为0。

字符串文字量:适当个数的const字符的数组。

char *p = "furzoom";
p[0] = 'F'; // error
char p[] = "furzoom";
p[0] = 'F'; // right

常量(const):直接描述“不变化的值”这样一个概念。必须进行初始化。

const实际上改变了类型,它限制了对象使用的方式,但不改变内存分配方式。

引用:

const T& = 1;
  1. 如果需要,进行隐式类型转换。
  2. 将结果存入一个类型为T的临时变量。
  3. 将此临时变量用做初始化式的值。

临时变量一直存在,直到引用的作用域结束。

参数传递的语义是通过初始化定义。

函数返回的引用可以作为左值。

函数

重载函数名:要从一组重载的函数中找到就应该实际调用的版本,需要找到在参数表达式的类型和函数的形式参数类型之间的最佳匹配。按如下顺序进行匹配:

  1. 准确匹配。无须转换或者只做平凡转换(数组名到指针,函数名到函数指针,T到const T等)的匹配。
  2. 利用提升的匹配。即包括整数提升(boolintcharintshortint,以及它们的无符号版本)以及从floatdouble的提升。
  3. 利用标准转换(intdoubledoubleintdouble到long doubleDerived*Base*T*void*intunsigned int)的匹配。
  4. 利用用户定义转换的匹配。
  5. 利用函数声明中的省略号...的匹配。

静态成员:访问权限与普通成员相同。静态成员变量需要在类定义(声明)外进行定义。静态成员变量不能被普通成员函数访问,可以被静态成员函数访问。在类外定义的静态成员变量不需要添加static标识。

常量成员:访问权限与普通成员相同。常量成员函数不能修改成员变量。常量成员函数不能调用普通成员函数,可以调用常量成员函数。在类外定义常量成员函数时也需要添加const标识。

自引用:修改对象状态的函数返回自引用,可以方便的使用。

运算符重载

对于任何二元操作符@,fur@zoom可以解释为fur.operator@(zoom),或者解释为operator@(fur, zoom)

对于任何前缀一元操作符@,@furzoom可以解释为furzoom.operator@(),或者解释为operator@(furzoom)

对于任何后缀一元操作符@,furzoom@可以解释为furzoom.operator@(int),或者解释为operator@(furzoom, int)

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《迟到的C++程序设计语言》
日志链接:http://furzoom.com/be-late-for-cplusplus/
博客名称:枫竹梦

【上一篇】
【下一篇】

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部