重学C++ (一)基础回顾
由于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++ (一)基础回顾的更多相关文章
- 【重学Git】基础命令篇
1.git commit :在提交树中增加一个提交节点,注意:分支是指向提交节点的. 2.git branch newImage : 表示创建一个名为newImage的分支. 3.git checko ...
- 重学js之JavaScript 面向对象的程序设计(创建对象)
注意: 本文章为 <重学js之JavaScript高级程序设计>系列第五章[JavaScript引用类型]. 关于<重学js之JavaScript高级程序设计>是重新回顾js基 ...
- 重学hadoop技术
最近因为做了些和hadoop相关的项目(虽然主要是运维),但是这段经历让我对hadoop的实际运用有了更加深入的理解. 相比以前自学hadoop,因为没有实战场景以及良好的大数据学习氛围,现在回顾下的 ...
- 1、java基础回顾与加强
一. 基础回顾 1 集合 1.1 集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, ...
- 推翻自己和过往,重学自定义View
http://blog.csdn.net/lfdfhl/article/details/51671038 深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 A ...
- JavaScript基础回顾一(类型、值和变量)
请看代码并思考输出结果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log ...
- python高级(1)—— 基础回顾1
Python基础回顾 认识变量 在学习了之前的Python零基础入门系列[洗礼灵魂,修炼Python](说明一下,这个系列现在回过来再来看这个名字确实好土啊,然后有些知识点感觉还不太精准,后期看如果有 ...
- 重学Java(一):与《Java编程思想》的不解之缘
说起来非常惭愧,我在 2008 年的时候就接触了 Java,但一直到现在(2018 年 10 月 10 日),基础知识依然非常薄弱.用一句话自嘲就是:十年 IT 老兵,Java 菜鸡一枚. 于是,我想 ...
- Python重学记录1
写下这个标题觉得可笑,其实本人2014年就自学过一次python,当时看的是中谷教育的milo老师的视频,也跟着写了一些代码,只是因为当时工作上用不到也就淡忘了.不过说实话当时的水平也很低下,本来也没 ...
- 重学 Java 设计模式:实战抽象工厂模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
随机推荐
- CentOS7带图形界面不能扫描网卡。
CentOS7在带有图形界面,在配置/sysconfig/network-script/ifcfg-ens*后不能识别到网卡,有可能是NetworkManager打开导致,可以使用systemctl ...
- 使用ansible批量推送公钥
准备两个yml文件 send-pubkey.yml - hosts: all remote_user: root # 连接远程主机的用户,密码就是文件中设置好的 ansible_ssh_pass 的值 ...
- Swagger UI教程 API 文档神器 搭配Node使用 web api 接口文档 (转)
http://www.68idc.cn/help/makewebs/qitaasks/20160621620667.html 两种方案 一.Swagger 配置 web Api 接口文档美化 二.通过 ...
- 实验七:基于REST API的SDN北向应用实践
(一)基本要求 编写Python程序,调用OpenDaylight的北向接口实现以下功能 (1) 利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight: (2) 下发指令删除s1 ...
- Java反射机制知识
modifier:修饰语 名词 JAVA 反射机制中,Field的getModifiers()方法返回int类型值表示该字段的修饰符. 其中,该修饰符是java.lang.reflect.Modifi ...
- uniapp使用阿里oss上传
可以删除重新上传,点击图片大图等功能. <view class="uploadView"> <view class="imageView" v ...
- 7. 基础增删改 - 创建管理员用Model-Drive App管理后台信息 - 创建Model-Driven App(什么是model-driven app)
一..什么是Model-Driven App? Model-Driven App是一个以组件为中心的应用程序开发方法,它不需要通过代码来运行,而且可以根据自己的需求来设计布局,编写出各种简单或者复 ...
- Mysql不同字符串格式的连表查询
MySql报错:Error Code: 1267. Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci, ...
- 【故障公告】cc攻击又来了,雪上加霜的三月
非常非常抱歉!今天 21:20-22:10 左右,肆无忌惮的 cc 攻击又来了,蓄意攻击者很厉害,躲过阿里云云盾的黑洞机制,轻松击垮园子的博客站点,又给大家带来了很大的麻烦,请大家谅解! 今年3月是园 ...
- 痞子衡嵌入式:盘点国内RISC-V内核MCU厂商(2021年发布产品)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内RISC-V内核MCU厂商(2021). 虽然RISC-V风潮已经吹了好几年,但2019年才是其真正进入主流市场的元年,最近国内大量 ...