从入门到了解C++系列-----初识C++

     写这个系列,是为了回顾 + 总结梳理自己的c++学习。里面的内容可能不会特别详细,但是我对于感觉比较重要的地方会进行详细的说明、理解,能把自己讲董的前提下让看这篇文章的人能够理解我的意思。

目录

1.命名空间

  1.1 是什么

  1.2 怎么用

     1.2.1 创建

    1.2.2 调用

2.引用 

 2.1 是什么

2.2 怎么用

   2.2.1 使用的场景

 3.函数名的重载

  3.1 是什么

3.2 为什么

 ​编辑4.参数缺省

5.内联函数

5.1 是什么

5.2 怎么用

6.auto

7.nullptr 

结尾


1.命名空间

  1.1 是什么

  命名空间是将标识符的名称进行本地化,是为了防止命名冲突与名字污染。

  1.2 怎么用

     1.2.1 创建

 可以通过关键词 namespace 进行使用。命名空间可以进行嵌套。

namespace DJX
{
   int gaoshu = 100;
   int Cplusplus = 100; 
};

    1.2.2 调用

有三种方法: 方法一:使用 using 关键字 

using DJX::gaoshu
int main()
{

   std::cout << gaoshu << std::endl;
   return 0;
}

方法二: 使用" :::作用域标识符

int main()
{
  std::cout << DJC::gaoshu << std::endl;
  return 0;
}

方法三:使用 using namespace (空间的名称) 实现整体命名空间的访问

using namespace DJX;
int main()
{
   std::cout << gaoshu << std::endl;
   std::cout << cplusplus << std::endl;
   return 0;
}

ps(前提是前面已经进行了DJX 空间定义) 

2.引用 

 2.1 是什么

对于一个变量起另外的一个别名,指向的是同一空间。关键字为 :&(放在类型的后面, 需要跟取地址区分开) 需要注意的是一定一定需要先初始化!!!

2.2 怎么用

   2.2.1 使用的场景

1.作为函数参数进行传参

void Swap(int& a,int& b)
{
   int c = a;
   a = b;
   b = c;
}
int main()
{
   int a = 1;
   int b = 2;
   Swap(a, b);
   cout<< a << endl;
   cout<< b << endl;
   return 0;
}

 相当于是给 a ,b变量起了一个别名,指向同一块空间。不需要传地址即可实现交换.

2.作为函数返回值

  这可以极大的提高代码运行的效率,但是不注意的也会有一些问题,我将会在后面进行分析。

int& add(int a, int b)
{
   static int c = 0;
   return c = a + b;
}
int main()
{
   int ret = add(2, 1);
   cout << ret << endl;
   return 0;
}

3.static

有没有注意到代码里面我给 C 加了一个 static ?是将这里的 c 指向的空间变为静态空间,防止因为栈帧对函数开辟空间,在调用完函数之后摧毁空间,导致c无法访问的问题。可能有的同学不太理解为什么?接下来我会通过图解的方式进行分析。

当加上这串代码”printf("Hello DJX");“,同时去掉 static 可以发现 ret 打印的是一个随机数。 

  同样的在改变为这串代码时,ret 的值也会发生改变。而我们并没有给 ret 赋值。 

int main()
{ 
  int ret = add(1, 2);
  add(2, 3);
  cout<< ret << endl;
  return 0;
}

 对于这种情况,去掉 static ,函数调用完之后空间不能访问了却还会打印 3,只是由于编译器的问题,编译器不同打印的结果也不相同。

int main()
{ 
   int ret = add(1, 2);
   cout << ret << endl;
   return 0;
}

4.权限问题

权限只能缩小,不能放大!int& a ,不能够引用 const int b; 

 3.函数名的重载

  3.1 是什么

当函数名相同,但参数的类型不同、不同类型的顺序不同、参数的个数不同时,会发生不一样的效果。

3.2 为什么

这是一道面试官经常会问到的一道题:为什么在 c 语言中函数不能进行重载,但是在 C++ 中却可以?

简单来说,就是在编译时,gcc 和 g++ 的函数命名规则不同。因为在 Linux 下显示简单,我将会使用它进行分析。

  众所周知,我们写了一个代码需要通过,预处理(去除注释、头文件展开、宏替换、条件编译)、编译(将代码转化为汇编代码)、汇编(将汇编代码转化为计算机能够看得懂的代码,二进制机械码)、链接(将两个目标文件链接在一起),的操作进行。所以在 gcc 中函数名的命名就是 函数名本身如图所示,但是在 g++ 中函数的命名规则为 _z + 函数名的字数 + 函数名 + 类型的首字母(有几个就加几个)。因此在链接时C++就可以实现重载。

 4.参数缺省

必须是从右向左进行定义,缺省。没有参数时自动调用定义的参数 1

int fun(int a, int b = 1, int c = 2)
{
  cout<< a << endl;
}
int main()
{
   fun(1);
   return 0;
}

5.内联函数

5.1 是什么

 以空间换取时间 ,当需要频繁调用一个较短的重复函数时,就可以使用 inline 减少频繁调用造成的时间浪费。

5.2 怎么用

直接在前面加上 inline

inline int add(int a , int b);

6.auto

可以自动识别参数的类型,但是数组不能够使用。 

7.nullptr 

建议将空指针设置为 nullptr 。应为 NULL 反编码是整形 0,并不是 空指针,会存在一些问题。

结尾

如果对你有帮助还请帮我点个免费的赞,支持一下我,我也会不断地改进争取写出跟高质量的文章。我们共同努力!!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值