今天看到一个小小的算法,交换两个数却不引入中间变量,想了下没什么思路。看了答案是这样:

 int a, b;
a = a + b;
b = a - b;
a = a - b;

  感觉还是挺有想法的,借此也引起我对语言的重新审视。考虑到年后去学校应该要参加招聘,可能要对以前所学进行全面的复习。当然第一步就是对编程语言的了解,简单翻了下《C++ Primer》(4th Edition)(手头只有这版的,只是用作复习),看到一些边边角角的语言特性都忘得差不多了。打算最近重新看一遍,把一些拾漏补缺的东西分享到这里来。所以接下来的一些列博客可能主要会是一些语言方面的特性。

  这一系列的博客命名为《C++拾遗》,并非完整的C++内容,只要是看到书上的已经忘了的内容,可能会涉及一些细枝末节的东西。不会面面俱到,主要以Tips的形式写作。至于顺序,就按照第四版书上,按照基本语言,容器和算法,类和数据抽象,面向对象和泛型,高级主题几部分进行。

  本文为本系列博文第一篇,介绍C++语言中的变量和基本类型。

  基本内置类型

  • 字符类型有两种:char和wchar_t。前者的类型通常是单个机器字节(Byte),后者则用于扩展字符集,比如汉字和日文,即某些不能用单个char表示的字符。
  • 关于整型的赋值:对象的类型决定对象的取值。当我们试图把一个超出其取值范围的值赋给一个指定类型的对象时,结果会如何?答案是取决于这种类型是signed还是unsigned。对于unsigned类型,编译器必须调整越界值使其满足要求,即对其取值求模,然后取所得值。例如,试图将336存储到8位的unsigned char中,则实际赋值为80.在C++中,把负数赋给unsigned char完全是合法的(有些语言中是非法的。注意到,unsigned char类型对象不为负数)。仍然是求模,例如,把-1赋给8位的unsigned char,结果是255。而对于signed类型,则由编译器决定,当然也可能按照上述方法。

  字面值常量

  • 通常使用decimal(20),octal(024),hexadecimal(0x14)表示。
  • 字符串字面值和宽字符串字面值不能直接相连。即,连接不同类型的行为标准没有定义。程序不应该依赖未定义行为,即使程序能运行。同样的,通常程序不应该依赖机器相关的行为,否则我们称之为不可移植(nonportable)。

  变量

  • C++作为强静态类型语言,在编译时会作类型检查,编译器必须能识别程序中每个实体的类型。
  • 对象是内存中具有类型的区域,无论是内置类型或类类型,无论是可读的或可写的。具体而言,计算左值表达式就会产生对象。
  • C++支持两种初始化变量的形式:复制初始化和直接初始化。如下:
     int ival();     //direct-initialization
    int ival = ; //copy-initialization

  注意,初始化不是赋值。初始化指创建变量并给它赋初始值;而赋值则是擦除当前值并用新值代替(关于这点见后续博文)。

  • 内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成0,在函数体内定义的内置类型变量不进行自动初始化。
  • 关于声明(declaration)和定义(definition)。定义用于为变量分配存储空间,指定初值。变量有且仅有一个定义。声明用于向程序表明变量的类型和名字。定义也是声明。可以通过extern关键字声明变量名而不定义它。声明可以多次。如果声明有初始化式,它可以被当作定义,即使有extern。

  const限定符

  • 因为const常量定以后不能被修改,所以定义时必须被初始化。
  • 与其他变量不同,在全局作用域声明的const变量是定义该对象的文件的局部变量,不能被其他文件访问。通过指定const变量为extern,就可以在整个程序中访问。
     //file_1.cc
    extern const int bufSize = fcn();
    //file_2.cc
    extern const int bufSize;
    //uses bufSize defined in file_1

    即,非const变量默认为extern,要是const变量能在其他文件中访问,必须显式指定它为extern。

      

C++拾遗(一)——变量和基本类型的更多相关文章

  1. 再读《C++ Primer》——变量和基本类型

    刚上大学那时,几个室友一块买了本<C++ Primer>第4版,看了一遍后就没怎么碰了,偶尔拿出来翻翻,当作工具书使用.后来知道有第5版了,一直觉得内容差不多吧.直到最近,再读其中的一些内 ...

  2. C和指针 第三章 变量的储存类型 auto、static、register以及static关键词

    变量的储存类型决定标量何时创建,何时销毁以及他的值保持多久.有三个地方可以储存变量: 普通内存static 运行时堆栈auto 硬件寄存器register 变量的缺省储存类型取决于它的声明位置: 静态 ...

  3. C++ Primer 笔记(2)第二章 变量与基本类型

    第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常 ...

  4. C++ Primer : 第二章:变量和基本类型(1)

    变量和基本类型之第一篇:基本内置类型和变量 一. (1) C++定义了一套包括算数类型和空类型,这些类型有:布尔类型bool,字符类型char,宽字符类型wchar_t,Unicode字符char16 ...

  5. C++ Primer 读书笔记 第2章 变量和基本类型

    C++ Primer 第二章 变量和基本类型 2.1 基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型(arithmetic type),此外还定义了Void类型. 算术类型 ...

  6. C++入门笔记(二)变量和基本类型

    变量和基本类型 一.基本内置类型 1.除去布尔类型和扩展的字符型外,其他整型可以分为带符号的和无符号的. 2.与其他整型不同,字符型被分为了三种:char.signed char 和 unsigned ...

  7. (C/C++学习笔记) 九. 变量的存储类型

    九. 变量的存储类型 ● 变量的存储类型(见附页) ● 注释 ①对于自动变量,它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来,一个 ...

  8. C/C++基础----变量和基本类型

    变量和基本类型 不同平台下基本类型的字节数 类型 16位平台 32位平台 64位平台 char 1 1 1 short 2 2 2 int 2 4 4 long 4 4 8 long long / 8 ...

  9. C++ 学习笔记 变量和基本类型(一)

    C++ 学习笔记 一.变量和基本类型概述 类型是所有程序的基础.类型告诉我们数据代表什么意思以及可以对数据执行哪些操作. c++基本类型: 字符型 整型 浮点型 c++ 还提供了可用于自定义数据类型的 ...

随机推荐

  1. 《Linux内核修炼之道》精华分享与讨论(5)——Kernel地图:Kconfig与Makefile

    转自:http://blog.csdn.net/fudan_abc/article/details/5340408 Makefile不是Make Love 从前在学校,混了四年,没有学到任何东西,每天 ...

  2. CS231n 2016 通关 第五、六章 Batch Normalization 作业

    BN层在实际中应用广泛. 上一次总结了使得训练变得简单的方法,比如SGD+momentum RMSProp Adam,BN是另外的方法. cell 1 依旧是初始化设置 cell 2 读取cifar- ...

  3. PDF上添加水印

    1.整合jar: itext-asian-5.2.0.jar,itextpdf-5.5.10.jar,iTextAsianCmaps.jar 下载:itext的整合jar包 2.使用方法: publi ...

  4. app UI测试之UIAutomator

    执行UIAutomator测试步骤 1.新建Java项目,导入android.jar和uiautomator.jar包,继承UiAutomatorTestCase 2.生成编译文件 android c ...

  5. linux中用管道实现兄弟进程通信

    1 使用fork函数创建两个子进程.在第一个子进程中发送消息到第二个子进程,第二个子进程都出来并处理. 2 在父进程中,不适用管道通信,所以什么不需要做直接关闭勒管道的两端 3 代码实现 #inclu ...

  6. TypeScript完全解读(26课时)_14.ES6和Nodejs中的模块

    创建modules文件夹,我们的文件都写在这里面 modules下面新建index.js文件,在index.ts内引入这个js文件 es6的模块 最主要的两个关键字 import和export imp ...

  7. 企业级SpringBoot与Dubbo的使用方式

    企业级SpringBoot与Dubbo的使用方式 SpringBoot越来越热门以至于达到满大街可见的程度,而Dubbo这个基于二进制的微服务框架又捐献给Apache孵化,如果不会如何使用那么是不是很 ...

  8. Codeforces643A【一种暴力】

    mdzz,今天好烦啊,连特么暴力都不会写了. 题意是:给你n个数(<=n),然后让你求对于每个数输出含有他最多数量的区间数,还有如果存在相等的话,这个区间算小的那个 思路: 暴力起点,然后从小区 ...

  9. autoResizing autoLayout和sizeClass

    原文网址: http://www.cnblogs.com/cxbblog/p/4166876.html 1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iO ...

  10. Python scrapy框架爬取瓜子二手车信息数据

    项目实施依赖: python,scrapy ,fiddler scrapy安装依赖的包: 可以到https://www.lfd.uci.edu/~gohlke/pythonlibs/  下载 pywi ...