C++入门知识(1)

命名空间的引入

C语言的缺陷以及C++的解决。

看下面这个代码:

这里进行了报错。

这里包含rand所在的头文件,然后头文件会进行展开。然后头文件里的rand和全局变量rand就会发生冲突。

这个就叫做命名冲突

因此C++引入了一个解决办法

namespace,就是这个把变量、函数、类型(结构体)来封装到命名空间里面。

我们来命名一个命名空间,把rand封装到里面。

这里打印的结果是访问的全局变量中的那个。

这里有两个rand的存在能同时发生是因为他们作用在不同的作用域中。

但是全局变量和局部变量如果优先访问的话实现访问局部的,再访问整体的。

那如果我们想要直接访问全局变量,那就要引入::,::也叫预作用限定符。

 那我们想访问命名空间里面的变量呢?

 用变量或者函数在编译默认查找时,默认先局部作用域,再全局作用域,这里默认不会到命名空间里面找。

命名空间里面除了定义变量,还可以定义类型和函数。

这里函数跟变量是一样的,这里再演示一下结构体类型。

 命名空间可以实现嵌套,可以命名空间套命名空间。

总结:命名空间可以定义变量、类型和函数,命名空间也可以嵌套命名空间。一个命名空间是新建立了一个作用域,默认情况下是不会查找的。

多个文件里面可以定义同名的命名空间,同名的命名空间他会进行合并。如果合并的里面有同一个变量怎么办,合并了以后就是同一个域,同一个域里面是不能有同名的,也就是他们准确来说如果这样发生冲突,那他们就不能定义在同一个命名空间。

这里其实再继续嵌套命名空间也可以解决。

命名空间调,比如想调用一个命名空间里面的一个函数多次,那就太麻烦了。因此这里引入了

误区:展开命名空间并不是展开头文件。 展开头文件的意思是在预处理阶段把头文件都拷贝过来。命名空间是一个域,展开命名空间是影响编译器的查找规则。即展开后,编译时就可以访问这个变量了。

展开命名空间后,即使不指定调用哪一个命名空间里的值,他也不会报错。展开其实这里理解加了一个声明。但是展开命名空间有一个问题。如果别人也有这个值,就会出现这个问题。

  下面是对访问的一些现象。

上面是用的全局的,后面是命名空间里面。不同的域里面是可以用同名的。

这里其实就是全局和命名空间的比较访问先后。

但是如果我们把全局那里也放到一个命名空间里面,那这个时候就会出现错误了。

结论:命名空间尽量不能随意展开。展开命名空间不是拷贝头文件,是一个声明。

其实这里可以展开命名空间一个单独的变量、类型或者函数。

命名空间其实总结下来也就3中访问方式:1.指定访问,但是重复访问麻烦。2.全部展开,这样做不太好。3.只展开其中的一个,哪一个常用就展开哪一个。

局部域和全局域会影响生命周期,命名空间域不会影响生命周期。这里解释一下:

下图的x和y还是全局变量,只不过用命名空间把名字进行了隔离,就是被人也可以定义。

局部域和全局域在分别完成了自己的进程后就进行结束,因而影响声明周期,而命名空间域不会影响声明周期。

 C++的新输入新输出的引入。

但是把命名空间都展开不好,这里也可以指定进行展开。 

std是库的命名空间.

灵活运用c或者c++的输入输出。

缺省参数的引入

缺省参数的意思就是在形参的后面给定一个值。

如果传递了实参,那么这个形参后面的值没什么用,但是如果实参没有传值,那么就会用形参后面的这个值即缺省值。

缺省参数可以有多个。但是实参传递时,不能跳跃传,必须按规定顺序传递。

上图的test2为全缺省,半缺省就是缺省一部分,只能从右向左缺省。

 要注意的点:缺省参数不能声明和定义同时给。缺省参数在声明给。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 23:28:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 23:28:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 23:28:03       87 阅读
  4. Python语言-面向对象

    2024-03-29 23:28:03       96 阅读

热门阅读

  1. ARM的开源硬件

    2024-03-29 23:28:03       41 阅读
  2. Golang中四种gRPC模式

    2024-03-29 23:28:03       37 阅读
  3. git 合并当前分支到 指定仓库的指定分支

    2024-03-29 23:28:03       44 阅读
  4. 学习没有速成可言

    2024-03-29 23:28:03       34 阅读
  5. 脏牛提权(靶机复现)

    2024-03-29 23:28:03       38 阅读
  6. Mybatis plus(一)

    2024-03-29 23:28:03       42 阅读
  7. 深入探索Python异步编程:从原理到实践

    2024-03-29 23:28:03       36 阅读
  8. spring概念 及 SpringIoc 、DI

    2024-03-29 23:28:03       45 阅读
  9. Vue 组件和插件:探索细节与差异

    2024-03-29 23:28:03       44 阅读