C++中需要注意的细节有哪些
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章给大家介绍C++中需要注意的细节有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。namespace的使用#include using namespace std;//
千家信息网最后更新 2025年01月19日C++中需要注意的细节有哪些
这篇文章给大家介绍C++中需要注意的细节有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
namespace的使用
#includeusing namespace std;//定义命名空间namespace NameSpaceA{ int a = 0;}namespace NameSpaceB{ int a=1; namespace NameSpaceC { struct Teacher { /* data */ char name[10]; int age; }; }}int main(){ //using namespace NameSpaceA; using NameSpaceB::NameSpaceC::Teacher; using namespace NameSpaceB; printf("a = %d \n",a); printf("a = %d \n",NameSpaceA::a); Teacher t1; t1.age = 20; printf("age: %d \n",t1.age); return 0;}
const使用:
//C++编译器对const常量的处理//当看见常量声明时,会在符号表中放入常量-->当要使用时,直接取符号表中的值替换//C中的const变量是个只读变量,但自己的存储空间//C++中-->const为全局或&时才会分配空间//#define和const相同之处:C++中的const修饰,是一个真正的常量,而C中只是个只读变量。const修饰的常量在编译期间就确定了。//#define与const不同之处:#define-->由预处理器处理,单纯的文本替换// const---->编译器处理,提供类型检查和作用域检查#includeusing namespace std;void fun1(){ #define a 10 const int b = 20;}void fun2(){ printf("%d\n",a); //cout< 引用
//引用的本质:// 1 引用在C++内部实现是一个常指针 Type &name --> Type * const name// 2 C++编译器在编译过程中使用常指针作为引用的内部实现.因此所占用的空间与指针一样大 4// 3 C++为引用的使用做了细节隐藏/* 函数返回值是引用: 1 难点注意:要观察返回的变量是在哪里分配内存空间的--->如果是临时变量,即在栈上分配内存,函数返回时会被析构(释放) --> 不能作为左值使用,因为空间被释放了。没地方存了 --> 不能成为其它引用的初始值,空间被释放了 2 c++链式编程编程、操作符重载*//* 指针的引用-->只不过是为存储指针的这块内存取了个别名而已*/#includeusing namespace std;//证明引用有自己的内存空间struct Teacher{ /* data */ int &a; int &b;};int main2(){ printf("sizeof(Teacher):%d \n",sizeof(Teacher)); //8-->int const *a and int const *b return 0;}int main1(){ int a = 10; int &b = a; printf("&a:%d\n",&a); printf("&b:%d\n",&b); //对同一内存空间可以取好几个名字吗? --> 不行 //实际上:int const *b = &a &b:编译器会帮我们做 *(&b) return 0;}//引用做函数返回值int f1(){ int a; a = 10; return a;}int &f2(){ int a; a = 20; return a;}int *f3(){ int a; a = 30; return &a;}//---> 害,其实就一句话,看内存有没有被释放而已//static + &引用int j() //-->返回的只是一个数值而已{ static int a = 10; a++; printf("a:%d \n",a); return a;}int &j2() //返回 *(&a){ static int a = 20; a++; printf("a:%d \n",a); return a;}int *j3() //->返回的是一个地址{ static int a = 30; a++; printf("a:%d \n",a); return &a;}int main33(){ //j()-->返回的是一个数值,不能当左值 11 = 100(err) j2() = 100; j2(); //手工打造引用条件 *(j3()) = 100; j3(); getchar(); return 0;}//非基础类型:可能设计到深拷贝和浅拷贝的问题-->其实也就是有没有内存空间的问题struct Student{ int age;};Student & Op(Student &s){ /* data */ s.age = 30;}int main44(){ Student s1; s1.age = 20; Op(s1); cout< const难点int main55(){ int a = 10; const int &b = a; //const char const* b = xxxx ---> 但a可以改变 // b = 11; a = 20; int *p = (int *)&b; // const int aa = 20; const int &bb = aa; //int &b = aa;}//const:常量 pk 变量 -->const int *const pint main(){ const int b =10; printf("&b:%d \n",&b); const int &bb = 19; printf("&bb:%d \n",&bb); getchar(); return 0;} 三目运算
//在C++中,三目运算返回变量本身,可以做左值#includeusing namespace std;int main(){ int a = 20; int b = 30; a = (a 函数相关
#includeusing namespace std;/* 第一部分:inline函数 1.内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略请求 2.内联函数是一种特殊的函数,具有普通函数的特征(参数检查,返回类型等) -->相对于普通的函数而言,内联函数省去了压栈、跳转、返回的开销 3.内联函数由编译器处理,然后将编译后的函数体直接插入调用的地方 宏定义-->预处理器处理,进行简单的文本替换,没有任何编译过程*/#define MYFUNC(a,b) ((a)<(b)?(a):(b)) //预处理阶段,简单的文本替换inline int func(int a , int b) //经历编译过程{ return a可以方便程序的扩展int f2(int a,int b,int = 0){ return a+b;}int main022(){ f2(1,2); f2(1,2,3); getchar(); return 0;}/* 第三部分: 函数重载-->参数个数不同 、 参数类型不同 、 参数顺序不同 编译器调用重载函数的准则: 将所有同名函数作为候选者 尝试寻找可行的候选者 精确匹配实参 匹配失败: 找到的可行函数不唯一,出现二义性,编译失败 没有找到可行的函数 注意事项: 重载函数在本质上是不同的函数,是相互独立的(静态链编) 函数重载是发生在同一个类里面的*///函数重载遇上函数指针int g(int x){ return x;}int g(int a ,int b){ return a+b;}typedef int(*PFUNC)(int);int main(){ int c = 0; PFUNC p = g; c = p(1); cout< 暗示编译程序相应的变量将被频繁的使用,如果可能的话,应该将其放到CPU的寄存器中,加快访问速度//减少了去内存中寻址、取值// #ifdef NOSTRUTASSIGN// memcpy (d , s , l)// {// register char *d;// register char *s;// register int l;// while (l--)// {// *d++ = *s++;// }// }// #endif 关于C++中需要注意的细节有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
函数
编译
空间
内存
参数
变量
C++
常量
编译器
指针
不同
类型
处理
分配
细节
可行
文本
符号
过程
检查
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网公司数据库营销方案
本地电脑建立个人云服务器
邯郸网络技术公
网络安全法目标
安全测试软件开发
软件开发有哪些阶段组成
北京中清龙图网络技术邮箱
千方百剂医药管理服务器出错
网络安全属于被动攻击的是指
太阁网络技术学习室
软件开发公司经营产品
福禄克网络技术专家
下列关于软件测试与软件开发
普陀区互联网络技术服务多少钱
参与网络安全制定的公司
数据库连接测试jsp代码
数据库拆分
网络安全座谈会邀请函
校园网络安全应急演练材料
电脑桌面数据库管理系统
厦门互联网科技大会
tcp服务器程序
raid服务器装杀毒软件
数据库表的关联关系共有几种
java软件开发实习生的经历
网络安全法倡导网络行为
sql查询表全部列数据库
济南达森互联网科技公司怎么样
软件开发技术 描述
昆山选择网络技术创新服务