《C++ Primer》读书笔记-第二章 变量和基本类型

变量

变量提供一个具名的,可供程序操作的存储空间。 C++中的每个变量都有其数据类型。 数据类型决定着变量的所占内存空间的大小、存储值得范围、能参与的运算。

变量定义

int a = 0;//首先是类型说明符(int),随后是变量名,最后是初始化(赋予一个初值)
//也可以连续定义变量,注意变量之间是逗号
int a = 0, b = 1;

对于初始化,C++的规定比较特殊,说明如下。
``

int c = 1;//用等于号初始化
c = 2;//先把原来的1擦除,赋值2

++初始化不是赋值,初始化是创建变量时赋予它一个初始值;赋值是把变量当前的值擦除,以一个新的值代替。++ 可能你现在觉得没什么区别,以后就会知道了。
除了上面使用的等于号初始化,还有两种初始化要了解。

列表初始化

int d{0}; //等价于int d = 0, 也等价于int d(0),这样初始化感觉好装逼啊。
使用花括号{}来初始化有一个很6的地方(当它跟类型转换混一起的时候),它不允许你丢失信息,听不懂的话下面举例说明:

double pi = 3.14;
int p1{pi}, p2 = {pi};//错误:列表初始化不允许损失信息
int p3(pi), p4 = pi;//正确:不同类型相互转换,且确实丢失了部分信息

默认初始化

int a;
程序员没有对a明确的初始化,则编译器默认初始化其为0,不同类型的变量默认初始化的值也不一样,那我们要不要去记住哪些变量类型对应的默认初始化值是多少呢?不用记,最好的办法就是我们不要默认初始化,每次定义一个变量,就赋给它一个初值。

变量声明和定义的关系

为了支持分离式编译(暂时可以理解为程序可以拆分为多个文件,然后一起编译),C++语言将声明和定义区分开:

  • 声明: 使得名字为程序所知,
  • 定义: 负责创建与名字关联的实体,变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义,但是可以声明多次。
extern int i; //声明i,声明一个变量而非定义它就在它前面加上关键字extern,且不要初始化
int j; //声明并定义j
extern int k = 0; 
//定义k,因为赋予了初值,所以等价于int k = 0;
//但是你在函数体内部不能这么干,包括main函数,会报错
//所以,还是老老实实用前面两种方式吧

如果要在多个文件中使用同一个变量,就必须将声明和定义分离。变量的定义只能出现在一个文件中,其他用到该变量的文件必须对其声明,不能重复定义。
  
C++是一种静态类型语言,在编译阶段检查类型。
变量命名规范很重要

  • 标识符(例如变量名)要能体现实际含义
  • 变量名一般用小写字母,如index,不要使用Index或INDEX
  • 用户自定义的类名一般以大写字母开头,如Bookstore
  • 如果标识符由多个单词组成,单词间应该有区分,如student_boy或studetBoy,不要使用studentboy。 以上的规范都是为了代码的可读性。对于命名规范来说,若能坚持,必将有效。

名字的作用域

用大括号来区分,话不多说,直接上代码。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int a=5;
    {
        int b=7;
    }
    cout<<b<<endl;//会报错,b的作用域只在定义的那个{}中,出了作用域就会报错。
    return 0;
}

还有一种情况要注意,可以重复定义,直接上代码。

#include <iostream>
using namespace std;
int main()
{
    int a = 0;
    {
        int a = 1;
        cout << a;//输出1,外面的全局a被覆盖了
    }
    cout << a << endl;//输出0,是全局变量a,局部定义的a出了作用域,失效了。
    return 0;
}

关于我自己

  • 一个正派但不正经的程序员

  • 18年计算机专业硕士毕业生,腾讯SNG部门实习生,现加盟快手科技 ,后端研发工程师一枚

  • 喜欢技术,喜欢互联网

  • 民遥控 ,赵雷、陈粒、宋冬野

  • 公众号:编程美学,时不时写篇文章,偶尔数羊,其实说到底,只是想和你聊聊
    在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值