C++中的const,引用本质,内联,默认/占位参数,

1、C++中的const

(1)、C++中的const是真正的常量,可以进行数组大小的定义;

代码如下:

#include<iostream>
using namespace std;

#define A 10

int main(void){
    int a = 10; 
    int array[a]; //Linux内核支持这样定义数组,其他的编译器不支持

    const int a = 10;  //这里是常量,所以可以进行下面的数组大小的确定;
    int array[a]; //任何平台都是对的,const编译时,执行;

    return 0;
}

(2)、C++中常引用时,必定开辟了新的内存空间;

代码如下:

#include<iostream>
using namespace std;

int main(void){
    //int &b = 10; //普通引用,引用一个常量,常量没有内存地址,引用就是给内存取多个别名;

    const int &b = 10; //C++编译器会为其分配内存空间;
}

(3)、const在函数后面修饰的本质:void fun(int a) const;

本质:void fun(const Teacher * const this, int a){},就是修饰的是*this;

2、引用的本质

  引用的本质:引用在C++中的内部实现是一个常指针;C++编译器帮我们程序员取了一个地址;

  Type &name <===> Type * const name; 

(1)、代码如下:

#include<iostream>
using namespace std;

struct Teacher{
    char name[64];
    int age;
    int &a; //很像指针所占用的内存空间大小;
    int &b; 
};
//普通引用占内存空间,和指针所占空间大小是一样的;

//引用的本质:引用在C++中的内部实现是一个常指针;C++编译器帮我们程序员取了一个地址;
//          Type &name <===> Type * const name;
int main(void){
    cout<<sizeof(Teacher)<<endl;

    return 0;
}
//一般int返回,返回的是变量的值;
//一般int &,引用返回的是变量本身;函数可放左边/右边;
//用引用作为返回值的话,其返回的空间不能是临时空间;
//g2() = 100;  可以作为左值,因为引用返回的是一段连续的存储空间,是变量;   
//函数作左值,必须返回一个引用;

(2)、运行结果:

原因:因为我用的是64位的,所以指针8字节,还有字节对齐,是其中最大基础数据类型字节的整数倍,此处应该为8的整数倍;

3、C++的内联函数

(1)、内联函数必须和函数体的实现写在一块;
  (2)、内联函数直接将函数体插入在函数调用的地方;
  (3)、内联函数速度更快,没有压栈,调转,返回等额外开销;
  (4)、内联函数中不能有循环语句,不能存在过多的条件判断语句;
  (5)、内联函数只是一种请求,C++编译器不一定允许这种请求;

代码如下:

#include<iostream>
using namespace std;

inline void printA(){   //内联函数让C++做特殊处理;
    int a = 10; 
    cout<<"a = "<<a<<endl;
}

//内联函数替代宏代码片段; inline
int main(void){
    printA();

    return 0;
}

4、C++中的默认参数

(1)、代码如下:

#include<iostream>
using namespace std;

//没传参数,就使用默认参数;
int printfA(int a = 1){ 
    cout<<a<<endl;
}
int printfA_1(int a, int b, int c = 1){}

//C++中允许函数有默认参数
//默认参数规则:从左边开始,如果默认参数出现,那么接下来的(右边)都必须是默认参数;
int printA_2(int a = 1, int b = 2, int c){}

int main(void){
    printfA();

    return 0;
}

(2)、运行结果:

默认参数规则:从左边开始,如果默认参数出现,那么接下来的(右边)都必须是默认参数,否则报错!!


5、占位参数和默认参数

(1)、代码如下:

#include<iostream>
using namespace std;

//函数占位参数:函数调用时,必须写够参数;
void func1(int a, int b, int){
    cout<<"a "<<a<<" b "<<b<<endl;
    
}

//默认参数和占位参数
//目的:为以后的程序留下扩展;

void func2(int a, int b, int = 0){  //这个函数既是默认参数,也是占位参数;
    cout<<"a "<<a<<" b "<<b<<endl;
}

int main(void){
    //func1(1, 2); 占位参数此时必须为3个,所以错误;
    //func1(1, 2, 3); 对
    func2(1, 2); //占位和默认参数,2/3个参数都是可以的;
    func2(1, 2, 3);//此时第3个参数没有什么意思,不能使用;

    return 0;
}
时间: 2024-08-25 23:40:56

C++中的const,引用本质,内联,默认/占位参数,的相关文章

位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数

一.位运算 应用: 1.判断某一位是否为1 2.只改变其中某一位,而保持其它位都不变 位运算操作: 1.& 按位与(双目): 将某变量中的某些位清0(与0位与)且同时保留其它位不变(与1位与):获取某变量中某一位(与其位与后判断是否为该数) 2.|  按位或(双目): 将某变量中的某些位置1(与1位或)且保留其它位不变 3.^  按位异或(双目): 将某变量中的某些位取反(与1异或)且保留其它位不变 异或运算特点: 如果 a^b=c,那么就有 c^b = a以及c^a=b.(穷举法可证---用于

C++ 中有关const引用的一点小知识

在读<C++ Primer>时,发现之前对const的概念不是很清晰,只知道如何去使用,于是翻开const引用部分又阅读了一遍,发现有两点自己要注意的地方 1.const限定的对象不可以初始化非const引用 ex. 1 const int src = 512; 2 const int &ok_dest = src; //ok: 引用和初始化对象都是const 3 int &err_dest = src; //error : 引用为非const 原因很简单, src 是不可以被

html 中的块级元素 内联元素

上一个礼拜,做crm项目,使用的大部分都是js,nodejs,ajax 的内容,但是今天我想写写关于html中的块级元素和内联元素 的东西. 首先,html 中的块级元素 内联元素 我们可以看到,这两个表格中有重复的元素,这些元素被称为可变元素 对于html中块级元素和行内元素,有什么区别呢? 块级元素会分行显示,行内元素是在同一行显示内容 具体区别如下:1.行内元素  在尺寸设置方面 设置它的宽,高,均无效 设置margin 值,左右的margin 值可以设置,上下的margin 值设置无效,

htmlt中的块状元素与内联元素

块元素(block element) address - 地址 blockquote - 块引用 center - 举中对齐块 dir - 目录列表 div - 常用块级容易,也是CSS layout的主要标签 dl - 定义列表 fieldset - form控制组 form - 交互表单 h1 - 大标题 h2 - 副标题 h3 - 3级标题 h4 - 4级标题 h5 - 5级标题 h6 - 6级标题 hr - 水平分隔线 isindex - input prompt menu - 菜单列表

C++引用,内联函数,函数重载二义性总结_C++

1.引用 1.1 引用的概念 C++语言中,可以定义"引用".引用定义如下: 类型名 & 引用名 = 同类型的某变量名: 例如:int n: int &r=n://r就是一个引用,可以说r的类型是int &,r引用了变量n,或者说r成为n的引用. 某个变量的引用和这个变量是一回事,相当于该变量的一个别名.请注意,定义引用时一定要将其初始化,否则编译不会通过,通常会用某个变量去初始化引用,初始化后,它就一直引用该变量,不会再引用别的变量了.也可以用一个引用去初始化

html中的块元素和内联元素的区别

一.定义 块元素一般都从新行开始,它可以容纳内联元素和其他块元素,可设置高度.宽度和边距等. 内联元素一般都是基于语义级的基本元素,它只能容纳文本或其他内联元素,主要特点是:和其他元素位于同一行上,高度.宽度和边距不可改变. 二.分类 块元素(block element) * address - 地址 * blockquote - 块引用 * center - 举中对齐块 * dir - 目录列表 * div - 常用块级容易,也是css layout的主要标签 * dl - 定义列表 * fi

mysql中的联合查询(内联、左联、外联、右联、全联)

联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer join .右联right outer join .全联full outer join 的好处及用法. 联合查询效率较高,以下例子来说明联合查询(内联.左联.右联.全联)的好处: T1表结构(用户名,密码) userid(int) usernamevarchar(20) password varchar(20) 1 jack jackpwd 2 owen owenpwd T2表结构(用户名,密码) us

C++学习笔记之——内联函数,引用

本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者:晨凫追风 一直想开始写C++的学习笔记,学习C++已经两个月了,今天开始写一下引用,内联函数,的一些概念和作用吧.那么开始吧! ????内联函数: 我们写的程序最终都是要用编译器,进行编译链接形成一段机器可以知道的二进制代码,接着存到一个内存中,这时候每一段程序代码都会有自己的一个地址,计算机按照地址增

C++关键字、命名空间、函数重载、缺省参数、内联函数、引用

一 .C++入门 1.C++关键字 2.命名空间 3.C++输入&输出 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字 9.基于范围的for循环 10.指针空值nullptr&nullptr_t 二. 正文 1.C++关键字(C++98) C++98中的关键字总共用63个,如下表: 在这这做简单介绍,感兴趣的朋友可以参考相关资料作进一步了解. 2.命名空间 由于在编写程序的过程中,很容易出现变量.函数和类重名的现象,这些变量.函数和类都在全局作用域中,因此会导致很多