当前位置: 首页 > news >正文

C++ (初始C++,命名空间,引用,函数增强)

c++使用指令 g++进行编译

头文件通常引用  #include <iostream>

编写前需加上  using namespace std;

char* 本身是指向字符数组首元素的指针,但字符串常量是字符数组(多个字符连续存储),所以当char* 指向它时会指向数组第一个元素,但C++中字符串的字面量时const char[],转换为char*会丢失const,所以会导致类型不匹配

命名空间

C++中提供了命名空间来解决同名引起冲突的问题,一个命名空间就是一个作用域,在不同命名空间中命名的相同符号代表不同的实体

namespace 名称{
        
    成员

}

命名空间通过关键字  namespace来创建,成员可以是函数,变量,常量,枚举/结构体/联合体,类,嵌套名字空间

名称是定义的命名空间的名字

通过 命名空间名称::成员  的方式来使用成员

int main(){

    A::global=500;
    A::function();

}

使用 using namespace 命名空间名称 来使用命名空间的所有成员

using namespace A;

int main(){

    global = 50;
    function();

}

声明使用命名空间中的一个成员

using A::global;
int main(){
    global = 50;

}

命名空间可以有许多别名,互相都可以使用

namespace A{
    int global;
}

namespace A_ll = A;

int main(){
    A::global = 50;
    A_ll :: global = 50;
}

定义在函数之外的变量是定义在全局命名空间中的,必须通过 :: 名称   来使用

int global = 0;

void function(){

}


int main(){
    
    ::global = 0;
    ::function();    

}

未命名的命名空间为匿名命名空间,不能跨文件使用,只能在该文件中直接使用

namespace{
    int global = 0;
}

int main(){

    global = 0;// 直接使用,不能跨文件

}

引用

引用就是对变量或对象的别名,可以替代C语言中通过指针修改变量的值的方法,对引用对象进行的操作与其绑定对象完全一致

格式为: 类型 &引用名 = 目标变量名

int main(){

    int a = 0;
    int &AA = a;
    AA = 20;
    cout << a <<endl; // 20

}

需要注意:

&不是地址运算符,只起标志作用

引用类型必须与变量类型相同

引用相当与一个别名,不能再将这个别名用作别的变量的别名

引用操作编译器会翻译为指针操作,所以引用的本质是指针

如何获取变量类型 :  将变量名称去掉,剩下的就是类型

对指针的引用:  类型* 引用名 = 指针名

int main(){
    
    int global = 0;
    int * pera = global;
    int* &peraa = pera;

}

对数组的引用:  类型 (&引用名)[数组中元素个数] = 数组名

int main(){

    int a[2]={};
    int (&b)[2] = a;

}

作为函数参数,可直接修改变量的值


   void charge_value(&date){
    
        date = 100;

}

int main(){
    int date = 10;

    charge_value(date);

    cout<<date<<endl;  // date = 100


}

常引用         const 类型 & 引用名 = 变量

不可通过该引用对其所绑定的对象进行修改

引用和指针的区别 : 

引用必须被初始化,不能为空,但指针可以

指针在程序运行的时候可以改变它的值,但引用一旦绑定一个变量就不能在绑定其他变量

sizeof(引用) 得到的是引用对象的大小   sizeof(指针) 得到的是指针本身的大小

引用只能为一级,但指针可以是多级

const 与 指针

int b = 2;
int a = 1;
const int* p =&a;

p = b;
//不可以写 *p = b , 因为const修饰的是int *,使用*就会报错

同理可推出

int a = 1;
int b = 2;

int * const p_x = &a;

*p_x = b;

// p_x = b 会报错



const int* const p_x = &a;

// p_x = b 和 *p_x = b 均会报错

 const 与 引用

int a = 0;

const int & p = a;

a = 10;

// p = 10 会报错

函数增强

默认值参数  :  在函数声明时为函数提供一个默认值,如果没有传参则默认使用默认值

void function (int a,int b,int c = 100){


}

int main(){

    function(10,20);//C默认使用100

}

当函数的定义和声明分开时,默认参数只能放在声明处

extern int function(int a,int b,int c = 100);//函数的声明

int main(){

}


int function(int a,int b,int c){


}

如果某个参数是默认值参数,那他后面的参数都必须是默认值参数

内联函数 : 将函数直接调到使用的地方,可以避免反复的跳转,减少内存消耗

递归函数无法使用内联函数

内联函数格式

extern int add(int a,int b)__attribute__((always_inline));

inline int add(int a,int b){


}

int main(){

    add(1,2);

}

相关文章:

  • Java-分布式锁tryLock(0, TimeUnit.SECONDS)中0的含义
  • 大模型中提到的分词器是什么
  • C++算法优化实战:破解性能瓶颈,提升程序效率
  • 【AI】使用 Hugging Face Transformers 进行文本摘要实现
  • (2)VTK C++开发示例 --- 绘制多面锥体
  • 预防WIFI攻击,保证网络安全
  • 《植物大战僵尸融合版v2.4.1》,塔防与创新融合的完美碰撞
  • RHCE第五章:NFS服务器
  • 前端操作document的小方法,主要功能-获取当前页面全部的a标签页,并根据链接中必要的字段进行判断,然后把这些链接放入iframe去打开
  • 【Windows】系统安全移除移动存储设备指南:告别「设备被占用」弹窗
  • UE5蓝图实现打开和关闭界面、退出
  • 使用人工智能大模型腾讯元宝,如何快速些成果申报书?
  • C/C++基础
  • 基于 DB、EAST、SAST 的文本检测算法详解及应用综述
  • VSCode写java时常用的快捷键
  • 【KWDB 创作者计划】_产品技术解读_2
  • 如何分析 JVM OOM 内存溢出 Dump 快照日志
  • ​印太贸易新轴心成型:澳新领衔的“关税破壁行动“​
  • VUE项目中的package.json中的启动脚本
  • 深入浅出:Seata 分布式事务管理器的部署与安装实战指南
  • 瑞士成第15届北影节主宾国,6部佳作闪耀“瑞士电影周”
  • 龙登高谈近世的基层治理及制度变迁
  • 观察|中日航线加速扩容,航空公司如何抓住机会?
  • 平安银行一季度净赚超140亿元降5.6%,营收降13.1%
  • 老人在健身中心晕倒获AED急救,上海检察机关为何被感谢?
  • 守护体面的保洁员,何时能获得体面?|离题