一、namespace 命名空间

//定义一个命名空间
namespace spaceA
{
int g_a = ;
} int main(void)
{
//调用方式一
using namespace spaceA;
cout << g_a << endl; //调用方式二
using spaceA::g_a;
cout << g_a <<endl; //调用方式三
cout << spaceA::g_a <<endl; return ;
}

二、C++比C语言增强的地方

  1、C++定义变量没有必要再开头就定义,可以随用随定义。
    C语言要在开头就定义所有的变量。

  2、C++语言对全局变量的检测能力增强。

(C语言合法)
int g_a; //bss段
int g_a = ; //data段
(C++语言非法)
int g_a; //bss段
int g_a = ; //data段

  3、C++中三目运算符可以当左值

int a = ;
int b = ;
int c = ;
c = (a < b) ? a : b;
//三目运算符可以当左值
((a < b) ? a : b) = ;
//结果是a = 50;

    C语言中,三目运算符返回的是一个值,也就是一个常量,因此不能作为左值
    C++中,三目运算符返回的是一个变量的引用,可以被修改,因此可以作为左值

  4、const增强

const int * c;    //指针所指向的空间不可通过解引用的方式修改,但是指针的指向可以修改。

int * const c;    //指针的指向不可修改,但是指针所指向的空间内容可以通过解引用的方式修改。

const int a = ;
int* p = (int*)&a;
*p = ;
cout << a <<endl;
cout << *p <<endl; //C语言输出 20 20
//C++输出 10 20
//C++分析
const int a = ; //a是真正的常量
int* p = (int*)&a; //如果对一个常量取地址,编译器就会临时开辟一个空间temp,让这个指针存放这个临时空间的地址
*p = ;
cout << a <<endl;
cout << *p <<endl; //所以,在C语言中,const int a = 10;是假常量
// 在C++中, const int a = 10;是真常量

三、C++对C语言的拓展
  1、引用
    引用实际上可以理解为一个变量的别名

  1. 引用没有定义,是一种关系型声明。声明它和原有某一变量(实体)的关系。故而类型与原类型保持一致,且不分配内存。与被引用的变量有相同的地址。
  2. 声明的时候必须初始化,一经声明,不可变更。
  3. 可对引用再次引用,多次引用的结果,是某一变量具有多个别名。
  4. &符号前有数据类型,是引用。其他皆为取地址。
int a = ;
int &re = a; //int & 使用引用数据类型,re就是a的别名
re = ;
cout << a << endl; //结果是 a = 50;
re = b; //也就是给a赋值b,并非把re这个a的引用变更为b的引用
int &re2 = re; //re2是re的引用,也就是a的引用
int &re3; //非法!引用一定要初始化

    引用作为函数参数传进去的函数的时候,传的是地址,并没有值拷贝过程,因此可以节省内存。

    引用所占用的大小,跟指针是相等的,32位系统时占4个字节。

    const引用

const int a = ;    //如果想对一个常量进行引用,必须是一个const引用
const int &re = a; int b = ;
const int &re2 = b; //相反,如果一个普通变量,用一个const引用接收是可以的
re2 = ; //非法,因为re2是const类型,不能修改

  2、内联函数
    inline
    ①内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。
    ②C++编译器直接将函数体插入在函数调用的地方。
    ③内联函数没有普通函数调用时的额外开销(压栈,跳转,返回)。
    ④内联函数是一种特殊的函数,具有普通函数的特征(参数检查,返回类型等)。
    ⑤内联函数由编译器处理,直接将编译后的函数体插入调用的地方,宏代码片段由预处理器处理,进行简单地文本替换,没有任何编译过程。
    ⑥C++中内联编译的限制:
        不能存在任何形式的循环语句
        不能存在过多的条件判断语句
        函数体不能过于庞大
        不能对函数进行取址操作
        函数内联声明必须在调用语句之前
    ⑦编译器对于内联函数的限制并不是绝对的,内联函数相对于普通函数的优势只是省去了函数调用时压栈,跳转和返回的开销。因此,当函数体的执行开销远大于压栈,跳转和返回所有的开销时,那么内联将无意义。

inline void printAB(int a, int b)
{
  cout << "a=" << a << "b=" << b << endl;
} int main(void)
{
  int a = ;
  int b = ;   printAB(a, b);   return ;
}

    内联函数总结:
        优点:避免调用时的额外开销(入栈与出栈操作)
        代价:由于内联函数的函数体在代码段中会出现多个“副本”,因此会增加代码段的空间。
        本质:以牺牲代码段空间为代价,提高程序运行时的效率。
        适用场景:函数体很“小”,且被“频繁”调用。

  3、函数的默认参数和占位参数

int get_volume(int len, int width, int height=)    //默认参数必须从右往左放,在调用传参的时候可以不写具有默认参数的实参
{
cout << "len =" << len <<endl;
cout << "w = " << width <<endl;
cout << "h = " << height <<endl; return len * width * height;
} void func(int x, int) //没有形参名的叫占位参数,因为没有参数名,没办法在下面的函数体中进行调用,只起到预留空间的作用,因此没有意义
{
cout << "x=" << x <<endl;
}

  4、函数重载
    函数的返回值类型 函数名(函数形参列表,包括参数个数、参数类型、参数顺序)
    函数重载,函数名相同,参数列表不同,并不关心函数返回值类型
    函数返回值类型并不是构成函数重载的条件
    函数重载尽量不要写默认参数,为了避免调用时出现函数冲突。因为默认参数的出现,调用时就可以缺省那一个参数,从而导致了函数冲突。
    函数重载调用规则:
        如果有严格完全匹配的,就调用完全匹配的;
        如果没有完全匹配的,能通过隐式转换匹配的,就会调用隐式转换匹配的那个函数;
        如果都匹配不到,调用失败

int func(int a)
{
cout << "a=" << a <<endl;
return ;
} int func(int a, int b)
{
cout << "a=" << a << "b=" << b <<endl;
return ;
} char func(int a, char b)
{
cout << "a=" << a << "b=" << b <<endl;
return ;
}

  5、函数指针

int func(int a, int b)
{
cout << "func" <<endl;
return ;
} //1.定义一种函数类型
typedef int(MY_FUNC)(int, int); //2.定义指向一种函数类型的指针类型
typedef int(*MY_FUNC_P)(int, int); int main(void)
{
//
MY_FUNC *fp = NULL;
fp = func;
fp(, ); //
MY_FUNC_P fp1 = NULL;
fp1 = func;
fp1(, ); //
int(*fp3)(int, int) = NULL;
fp3 = func;
fp3(, ); return ;
}

C++笔记--1的更多相关文章

  1. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  7. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  8. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  10. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

随机推荐

  1. kubernetes入门(07)kubernetes的核心概念(4)

    一.pod 二.Volume volume可以为容器提供持久化存储,比如 三.私有镜像 在使用私有镜像时,需要创建一个docker registry secret,并在容器中引用.创建docker r ...

  2. 配置ssh无密钥登陆

    ssh 无密码登录要使用公钥与私钥. linux下可以用用ssh-keygen生成公钥/私钥对,下面以CentOS为例. 有机器LxfN1(192.168.136.128),LxfN2(192.168 ...

  3. MongoDB GridFS 存储大文件

    我们经常会遇到这样的场景:上传/下载文件. 有两种思路可以解决这个问题: (1)将文件存储在服务器的文件系统中: (2)将文件存储在数据库中. 如果我们选择(2),那么我们可以使用MongoDB Gr ...

  4. 翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

    4.4.7. The CONSTANT_Utf8_info Structure The CONSTANT_Utf8_info structure is used to represent consta ...

  5. 使用Git进行代码版本管理及协同工作

    Git简介: git是一种较为先进的代码版本管理及协同工作平台,采用分布式文件块存储: 1.  分布式: 代码保存在所有协同成员的计算机上,网速较差时依然可用:而传统的集中式代码版本管理系统则较难脱离 ...

  6. 深入浅出Lua虚拟机

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:郑小辉 | 腾讯 游戏客户端开发高级工程师 写在前面:本文所有的文字都是我手工一个一个敲的,以及本文后面分享的Demo代码都是我一行一 ...

  7. SpringMVC(十):SpringMVC 处理输出模型数据之Map及Model

    Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...

  8. 【FAQ系列】关于SQL_Errno:1677导致主从复制中断的思考和实践

    1.简单介绍该错误发生的背景: 1) 数据库版本:MySQL5.7.19 2) 对一个大表修改字段类型DDL(将主键id int变为bigint),为了不影响主库业务,先在从库上执行DDL操作,然后通 ...

  9. 使用WSUS离线下载补丁并安装在非联网的windows系统中(以Windows Server 2008 r2为例)

    首先我失去https://serverfault.com/questions/322938/finding-and-downloading-all-available-win2008-r2-and-w ...

  10. 盒子浮动float

    一.float的基本规律 规律1: 标准流模型中的块级盒子,默认宽度100%: 而浮动的块级盒子,宽度不会自动伸展,而是由内容(文字.padding)撑开: 浮动后的行级元素,可以设置宽度高度等属性. ...