首页 > 编程语言 >C++基础知识总结

C++基础知识总结

时间:2024-06-13 15:00:08浏览次数:21  
标签:总结 const 函数 int C++ 基础知识 引用 变量 指针

一.c++的初始化

int mian()
{
  int a=10;
  int b(10);//用()来初始化
  int c{10};//用{}来初始化,较统一标准
return 0;
}

二.c++语言输入与输出

#include<iostream>//输入输出流
using namespace std;
int main()
{
int a{0};
char ch{'0'};
cin>>a>>ch;   //提取符
cout<<"a= "<<a<<"ch= "<<ch<<endl; //插入符,遇到endl结束
return 0;
}

三.const关键字

(1)const关键字在c++中的用法:const修饰的变量称为常变量,但在c++中以常量为主。

例如以下代码:

int main()
{
  const int n=10;
  int arr[n]={1,2};//在c语言中是错误的,但在c++中是正确的,n就相当于常数
return 0;
}

(2)const与指针的关系

int main()
{
  int a=10,b=20;
  int *p=&a;
  const int*p2=&a;//指向为常性(解引用)
  int const *p2=&a;
  int*const p3=&a;//指针变量本身为常性
  const int*const p4=&a;//指针变量和指针的指向都是常性
return 0;
}

(3)常变量与指针

int mian()
{
  const int a=10;
  int*p1=&a;               //erro
  const int*p2=&a;         //ok
  int *const p3=&a;        //erro
  const int *const p4=&a;  //ok 
  int *p5=(int*)&a;        //ok(不安全)
  int *p5=const_cast<int*>(&a);  //去常性转化
rteurn 0;
}

总结:能力强的指针赋值给能力收缩的指针。

四.引用

(1)引用的定义:类型&引用变量名称=变量名称;

&和类型结合称为引用符号,不是取地址的意思,代表变量的别名。

int main()
{
   int a=10;
   int b=a;
   int &c=a;//引用,即同一实体两个名字,左值引用
   c=b;
  return 0;
}

(2)引用的特点

int main()
{
   int a=10;
   int &x;      //erro 引用的定义必须初始化
   int &y=NULL: //erro没有空引用
   int&b=a;
   int&&c=b;    //erro没有引用的引用
}
   

左值引用:&可以取地址        左值:具名

右值引用:&&不可以取地址   右值:不具名

(3)const引用

int main()
{
  int a=10;
  const int b=20;
  int &x=b;//error
  const int &x=b;//ok
  const int &y=a;//ok
  const int &z=10;//ok
}

注意:常性变量只能初始化常引用;常性左值引用是万能的。

 在swap交换函数中,用引用传递形参时,不用判空,比指针更安全。

重点:指针和引用的区别:

从语法规则上来将:1.指针储存某个变量或对象的地址,引用是   某个实例的别名。

       2.程序为指针变量分配内存区域,而不为引用分配内存区域。

       3.解引用指针的前面要加*,而引用可以直接使用。

       4.指针变量的值可以发生改变,存储不同实例的地址,而引用在定义时被初始化,之后无法改变。

        5.指针变量可以为空(NULL,nullptr),而没有空引用。因此指针变量作为形参时需要进行判空操作,而引用不用。

       6.对指针变量使用sizeof求得指针的大小,而对引用变量使用sizeof得到的是变量的大小。

        7.理论上指针的级数没有限制,但引用只有一级,即不存在引用的引用,但存在指针的指针。++引用和++指针的效果不同。

对指针变量的的操作会使指针变量指向下一个实体的地址,而不是改变实体的内容。

对引用的操作直接反映到引用的实体。

从汇编(本质)上说:引用是自身为常性的指针。

(4)引用的其他形式

int mian()
{
   int a=10;b=20;
   int ar[5]={1,2,3,4,5};
   int *p=&a;
   int*&pr=p;//引用指针
   int &x=ar[0];
   int (&br)[5]=ar;//引用数组
return0;
}

五.inline函数

内联函数,在编译期间编译器能够在调用点内联展开该函数。

inline函数是一种以空间换时间的做法,省去调用函数额开销,但是代码过长或者递归函数不会以内联展开该函数。

注意内联函数的声明和定义不建议分离,不然会导致链接错误。

如果函数的执行开销小于开栈清栈开销(函数体小),使用inline函数效率高,否则采用普通功函数处理方法。

inline函数和宏的的区别:

(1)内联函数在编译时展开,宏在预编译时展开。

(2)内联函数是嵌入到目标代码,宏是简单的文本替换。

(3)内联函数有类型检查,语法判断,宏只是替换。

六.缺省函数

1.缺省函数指在函数定义时为形参指定缺省值(默认值)。

缺省函数中函数的形参和实参个数可能会不一样。如果给出实参,将实参传递给形参使用,如果没有实参,则按缺省值进行调用。

但是缺省值必须放在函数的参数表的右侧,先定义所有的非缺省参数。

在多文件中,缺省参数在GG头文件的声明中指定,不要在函数的定义中指定。

七.函数重载

定义:两个或两个以上的函数可以使用相同的函数名,但是只要参数类型不同,或参数类型相同

而参数的个数不同,称为函数重载。

如果两个函数的参数表中参数的个数或类型,或顺序不同,则认为是重载。

当一个形参类型有const和volatile修饰时,如果形参定义指针或引用时,在识别函数声明是否相同时要考虑const和volatile修饰符,而定义普通变量时不考虑。

c++中函数可以重载的原因:函数名修饰规则和c不同,C语言会默认成函数的原名,而c++会修饰成函数名加上形参的缩写,因此参数不同,c++会认为是两个不同给的函数,从而实现重载。

标签:总结,const,函数,int,C++,基础知识,引用,变量,指针
From: https://blog.csdn.net/weixin_62913480/article/details/139049908

相关文章

  • SQL 基础知识
    **SQL基础知识**一、变量1、变量分类:局部变量,全局变量2、局部变量:局部变量以@开头,作用范围仅在程序内部。数据类型除(text,ntext,image)类型外的所有系统数据类型和用户自定义类型如:decalre@testnamechar(10)3、局部变量赋值:select语句,set语句......
  • c/c++ 创建windows 服务程序
    1项目介绍本次的项目是设计windows服务程序监听系统时间,对误差的时间进行修改,解决不连网下的本地时间的误差问题。2程序设计当程序直接运行时为创建该程序为windows服务程序,创建的windows服务程序设置为开机自启且运行带参数"-krunservice"以进行区别为创建服务还是运行程序......
  • 关于RTthread使用PWM的总结经验(基于STM32F4系列)
    目录硬件资源介绍:前期准备:代码编写:总结:硬件资源介绍:笔者使用的是STM32F407VET6是魔女开发板,因为RT不支持CMSIS-DAP烧录,所以我又准备了一个ST-link,一个红色的LED。我所使用的是TIM2-CH3通道,在我这个板子上对应的是PA2口。原理图如下所示。可以看到PA2上对应的有TIM2_......
  • Beta版会议总结
    会议记录-2024.6.12会议主题:快易递友APP开发问题讨论与会人员:陈庆振,王泽杨,邓睿智讨论的问题:·修改好友聊天交流功能我们需要精心设计并实现一个好友聊天功能,不仅要确保消息的实时传输和接收,还要将消息加密和安全性作为核心考量因素,为用户提供一个安全、流畅的聊天......
  • Beta版会议总结(事后诸葛亮模板)
    **1.*以“事后诸葛亮”为模板总结会议header1、我们的软件要解决什么问题?是否定义的很清楚?是否对典型用户和典型场景有清晰的描述?主要是要方便老师学生的生活,少跑一趟取快递时间可用做其他事情,而取快递的人可以通过拿一次快递,挣一顿饭钱,方便自己方便他人;......
  • 计算机网络之网络层知识总结
    网络层功能概述主要任务主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报。分组和数据报的关系:把数据报进行切割之后,就是分组。主要功能:路由选择与分组转发路由器主要完成两个功能:是路由选择(确定哪一条路径),二是分组......
  • c++定义了类在main函数中使用的一个坑现象的解决,让我理解了栈,堆和内存之间关系。
    首先描述一下我的坑是啥?我的坑就是写了一个对集料颗粒进行角度计算的类,在main函数中使用采用了类定义申明,这样使用导致一个坑,这个类中对于集料的数目进行了宏定义,发现数据如果超过20个,编译就报错,当时没有太在意这个坑,没有思考什么原因。也就将就者用了。后来对接同事说,这个颗粒数......
  • [C++ Primer] 字符串、向量和数组
    [C++Primer]字符串、向量和数组标准库类型string标准库类型string表示可变长的字符序列,使用该类型需包含string头文件。作为标准库的i一部分,string定义在命名空间std中。拷贝初始化:使用等号(=)初始化一个变量直接初始化:不使用等号strings5="hiya"; //拷贝初始化s......
  • [C++ Primer] 变量和基本类型
    [C++Primer]变量和基本类型变量默认初始化如果定义变量时没有指定初值,则变量默认初始化,此时变量被赋予“默认值”。默认值到底是什么由变量类型决定,同时定义变量的位置也会对此有影响。内置类型:其默认值由定义的位置决定。定义于任何函数之外的变量被初始化为0。绝大多数......
  • 【C++面向对象】重载操作符
    C++将运算符重载扩展到自定义的数据类型,它可以让对象操作更美观。例如字符串string用加号(+)拼接、cout用两个左尖括号(<<)输出。运算符重载函数的语法:返回值operator运算符(参数列表);运算符重载函数的返回值类型要与运算符本身的含义一致。非成员函数版本的重载运算符函数:形......