C++基础[1]

目录

1.命名空间:

2.缺省参数:

3.函数重载:

4.引用:

5 .指针vs引用:

 6.为什么C语言不支持函数重载,C++支持?

7.C与C++能互相调用库吗?->可以。

8.内联函数

9.auto关键字:

10.nullptr:


1.命名空间:

第一次打印在全局中找,rand为函数名,此时打印的为函数指针(地址);

第二次打印在bit命名空间中找 rand为变量(0),打印结果为0;

using namespace __(命名空间名)-->>直接展开命名空间;

//项目中,尽量不要using namespace std;

//日常练习用using namespace std;

//项目中:指定命名空间访问+展开常用(using std::cout)

2.缺省参数:

从左往右给,必须从右往左缺省,不能间隔;

缺省参数不能在函数声明和定义中同时出现(声明说了算);

全缺省/半缺省;

3.函数重载:

返回值无法构成重载,传参可以重载;C语言不能重载,必须函数名字不同(不同函数);

4.引用:

1.引用必须在定义时初始化;

2.一个变量可以有多个引用;

3.引用一旦引用一个实体,再不能引用其他实体(区别于指针)

4.权限可以缩小,但不能放大(const);

5.

--用处:

1.做参数--a、输出型参数; b、大对象传参,提高效率;c、传值返回

a.

5 .指针vs引用:

1.使用场景

2.语法特性及底层原理

指针和引用用途基本是相似的

指针更强大,更危险,更复杂。

引用相对局限一些,更安全,更简单

引用和指针的不同点:

(部分)如上:

4.在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台占4个字节)

5.引用自加即引用的实体+1,指针自加即指针向后偏移一个类型的大小;

6.有多级指针,但是没有多级引用;

7.访问实体方式不同,指针需要显式解引用,引用编译器自己处理;

8.引用比指针使用起来相对更安全;

 6.为什么C语言不支持函数重载,C++支持?

C++在编译时产生符号表时,对重载的函数名会有一套修饰规则(i为int类型首字母,d为double类型首字母),从而可以区分找到其函数的地址调用栈帧,但C语言没有修饰规则,符号表区分不出函数,找不到地址

7.C与C++能互相调用库吗?->可以。

8.内联函数

编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,~~提升程序运行的效率。

C->宏函数

C++->inline

宏的优点:a、复用性变强 b、宏函数提高效率,减少栈帧建立

宏的缺点:a、可读性差 b、没有类型安全检查 c、不方便测试

错误展示:

正确示范:

1.inline是一种以空间换时间的做法,省去调用函数额外开销,所以代码很长或者有递归的函数不适宜,(如果展开,导致编译出来程序变大)使用作为内联函数。

2.inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有上述等,编译器优化时会忽略内联。

3.inline不建议声明和定义分离,分离会导致链接错误,因为inline被展开,就没有函数地址了,连接就会找不到。

9.auto关键字:

//自动迭代,自动判断结束。

//范围for

//范围for不能auto数组;

10.nullptr:

NULL宏定义值为零,作为参数传递时有时是int类型,有bug;提供了nullptr;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值