由于C++基础非常重要,所以打算把平时重学C++的总结,抽时间上传到博客!

1.切勿乱用带符号类型和无符号类型

#include <iostream>
using namespace std; int main()
{
    unsigned u = 10;
    int i = -42;     cout<<i+i<<endl; //输出-84
    cout<<u+i<<endl;//如果整型int占32位,输出4294967264,即这个负数+无符号数的模     return 0;
}

2.变量声明和定义的关系

● 如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示的初始化变量,extern如果包含初始值就不再是声明,而变成了定义了;

extern int I;                             //声明i而非定义i

int j;                                        //声明并定义j

extern double pi = 3.1456;    //定义

● 变量能且只能被定义一次,但是可以被多次声明;

● 变量的定义必须出现在且只能出现在一个文件中,而其他文件用到该变量的文件必须对其进行声明,却绝不能重复定义

    t1.h
    #ifndef _t1_H
    #define _t1_H
    int p = 20;
    #endif     t1.cpp
    #include <iostream>
    #include "t1.h"
    using namespace std;
    //extern int p = 10;          //不能重复定义,报错  
    extern int p ;                //声明p已经在t1.h中定义
    int main()
    {
        cout<<p<<endl;            //20
        return 0;
    }

3. 复合类型

引用,引用即别名,引用并非对象,它只是为一个已经存在的对象所起的另外一个名字,引用必须初始化。

int i = 1024,i2 = 2048;      //i和i2都是int

int &r = i, r2 = i2;             //r是一个引用,与i绑定在一起,r2是int

int &refVal1 = 10;          //错误:引用类型的初始值必须是一个对象

double dval = 3.14;

int &refVal2 = dval;          //错误:此处引用类型的初始值必须是int型对象

● 指针,与引用类似,指针也实现了对其他对象的间接访问

double dval;
double *pd = &dval;        //正确:初始值是double型对象的地址
double *pd2 = pd;          //正确:初始值是是指向double对象的指针
int *pi = pd;              //错误:指针pi的类型和pd的类型不匹配
pi = &dval;                //错误:试图把double型对象的地址赋值给int型指针 int i = 42;                        
int *p ;                   //p是一个int型指针
int *&r = p;               //r是一个对指针p的引用(最简单的方法就是从右向左阅读r的定义,离变量名最近的符号(此例中是&r的符号&)对变量的类型有最直接的影响,因此r是一个引用。声明符的其余部分用以确定r引用的类型是什么,此例中的符号*是说明r引用的是一个指针。最后,声明的基本数据类型部分指出r引用的是一个int指针)

不同点:1.指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。

2.指针无须在定义时赋初值,和其它内置类型一样,在块作用域内定义的指针如果没有被初始化,也将有一个不确定的值

4.const限定符

1)const 对象一旦创建后其值就不能再改变,所以const对象必须初始化

const int i = get_size();       //正确:运行时初始化

const int j = 42;                  //正确:编译时初始化

const int k ;                        //错误:k是一个未经初始化的常量

2)如果想在多个文件之间共享const 对象,必须在变量的定义之前添加extern关键字

//file_1.cc 定义 并初始化了一个常量,该常量能被其他文件访问

extern const int bufsize = fcn();

//file_1.h头文件

extern const int bufsize;     //与file_1.cc中定义的bufsize是同一个

3)默认状态下,const对象仅在文件内有效(为了支持这一用法,同时避免对同一变量的重复定义,默认情况下,const对象被设定为仅在文件内有效。当多个文件中出现了同名的const变量时,其实等同于在不同的文件中分别定义了不同的变量。)

重学C++ (一)基础回顾的更多相关文章

  1. 【重学Git】基础命令篇

    1.git commit :在提交树中增加一个提交节点,注意:分支是指向提交节点的. 2.git branch newImage : 表示创建一个名为newImage的分支. 3.git checko ...

  2. 重学js之JavaScript 面向对象的程序设计(创建对象)

    注意: 本文章为 <重学js之JavaScript高级程序设计>系列第五章[JavaScript引用类型]. 关于<重学js之JavaScript高级程序设计>是重新回顾js基 ...

  3. 重学hadoop技术

    最近因为做了些和hadoop相关的项目(虽然主要是运维),但是这段经历让我对hadoop的实际运用有了更加深入的理解. 相比以前自学hadoop,因为没有实战场景以及良好的大数据学习氛围,现在回顾下的 ...

  4. 1、java基础回顾与加强

    一.    基础回顾 1   集合 1.1  集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList:    数组实现, ...

  5. 推翻自己和过往,重学自定义View

    http://blog.csdn.net/lfdfhl/article/details/51671038 深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 A ...

  6. JavaScript基础回顾一(类型、值和变量)

    请看代码并思考输出结果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log ...

  7. python高级(1)—— 基础回顾1

    Python基础回顾 认识变量 在学习了之前的Python零基础入门系列[洗礼灵魂,修炼Python](说明一下,这个系列现在回过来再来看这个名字确实好土啊,然后有些知识点感觉还不太精准,后期看如果有 ...

  8. 重学Java(一):与《Java编程思想》的不解之缘

    说起来非常惭愧,我在 2008 年的时候就接触了 Java,但一直到现在(2018 年 10 月 10 日),基础知识依然非常薄弱.用一句话自嘲就是:十年 IT 老兵,Java 菜鸡一枚. 于是,我想 ...

  9. Python重学记录1

    写下这个标题觉得可笑,其实本人2014年就自学过一次python,当时看的是中谷教育的milo老师的视频,也跟着写了一些代码,只是因为当时工作上用不到也就淡忘了.不过说实话当时的水平也很低下,本来也没 ...

  10. 重学 Java 设计模式:实战抽象工厂模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

随机推荐

  1. VMware linux 网络设置

    控制面板\所有控制面板项\网络连接 1.选择 VMware Virtual Ethernet Adapter for VMnet8 网卡  ->属性-->网络 2.勾选 -> VMw ...

  2. Linux挂载U盘报错:mount: unknown filesystem type 'ntfs'

    原因:由于Linux上无法识别NTFS格式的分区的原因 解决方法:安装 ntfs-3g 1.下载:wget https://tuxera.com/opensource/ntfs-3g_ntfsprog ...

  3. 转发:Midway Serverless 发布 2.0,一体化让前端研发再次提效

    自去年 Midway Serverless 1.0 发布之后,许多业务开始尝试其中,并利用 Serverless 容器的弹性能力,减少了大量研发人员对基础设施和运维的关注.对前端开发者而言,他们只需写 ...

  4. C#中冒号:使用场景

    1. 继承类.实现接口与继承构造函数 ① 继承类 /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public p ...

  5. 如果摄像头不支持Web Socket,猿大师播放器还能在网页中播放RTSP流吗?

    问: 我们的情况比较复杂,摄像头设备品牌和数量都比较多,分布在全国各地都有,地点分布比较广泛,有的甚至是比较老的型号,如果摄像头设备不支持Web Socket,猿大师播放器还可以在网页中播放RTSP流 ...

  6. 2020杭电多校第四场 Go Running 最小点覆盖等于二分图最大匹配数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6808 思路:刚开始也是乱想,想几下就忍不住画个t-x图像,然后每个点有两种可能,一是向西跑,一是向东跑 ...

  7. 用声网 Android UIKit 为实时视频通话应用添加自定义背景丨声网 SDK 教程

    使用声网 SDK 和 UIKit 创建视频推流应用非常简单,而且声网还有许多功能,可以提高视频通话的质量和便利性.例如,我们可以在视频通话过程中使用虚拟背景,为视频通话增添趣味性. 我们可以通过以下三 ...

  8. 微软wsl2启用天父行程systemd

    默认情况下 微软wsl2的天父行程是init,没办法使用systemctl相关指令,所以想使用天父行程 systemd. 本文以Wsl2 Alma Linux为例,启用systemd 上帝与你同在,阿 ...

  9. 工良出品:包教会,Hadoop、Hive 搭建部署简易教程

    目录 导读 Hadoop.Hive 是什么 运行环境 Java 环境 Mysql 下载 Hadoop.Hive 和 驱动 安装 Hadoop core-site.xml hdfs-site.xml m ...

  10. 穷人版生产力工具,好用得飞起 「GitHub 热点速览」

    被 GPT 和 OpenAI 刷屏了一个多月,现在 GitHub Trending 已经没有什么和 gpt 无关的项目了,但是好在总有优秀的开源项目拯救我的项目疲惫.像是贴心好用的反向代理 pgrok ...