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

 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. POJ1742(多重部分和问题:模板题)

    Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 32776   Accepted: 11131 Descripti ...

  2. 蓝桥杯 2014本科C++ B组 奇怪的分式 暴力枚举

    蓝桥杯 枚举 奇怪的分式 标题:奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1 ...

  3. HDOJ-2045

    不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  4. 割点(Tarjan算法)

    本文可转载,转载请注明出处:www.cnblogs.com/collectionne/p/6847240.html .本文未完,如果不在博客园(cnblogs)发现此文章,请访问以上链接查看最新文章. ...

  5. E20181030-hm

    conquer  vt. 征服; 克服; 攻克; 打败(敌人);  vi. 得胜,胜利; recur vi. 复发; 重现; 再发生; 回想; recurrence n. 复回,重现; 反复,隐现; ...

  6. phpstudy的mysql版本升级至5.7

    phpstudy安装的mysql版本一般都是5.5或5.4的,但是有时候做项目又必须用到mysql5.7版本,所以我们现在来看一下如何在phpstudy的环境下将mysql版本升级至5.7 温馨提醒: ...

  7. 【渗透测试】如何使用burpsuite对特殊密码进行爆破

    爆破是渗透测试中必不可少的一部分,对于没有太大价值可利用的漏洞或是业务只有一个登陆页面时,爆破更是我们的最合适的选择.那么在爆破时,抛去目标系统对爆破频率的限制,如果遇到较为复杂的密码,该如何顺利进行 ...

  8. 新装ubuntu 12.04 , 使用技巧

    *********************************************** 一.让Ubuntu 12.04开机默认进入命令行模式. 修改 /etc/default/grubGRUB ...

  9. Maven - settings.xml简易配置Demo

    前言 这里贴一下settings.xml的一个简易配置demo,就是简单配置了:本地的仓库地址.阿里云镜像.指定使用jdk1.8进行编译. 这里使用的Maven是3.5.0版本的. 配置文件demo ...

  10. js+canvas(H5)实现小球移动小demo

    *canvas提供画布,大小自定义,js得到画布,从画布对象通过getContext('2d')来得到画笔,然后就可以开始画了 代码: <!DOCTYPE html> <html l ...