C++入门(命名空间)

简介: C++入门(命名空间)

C++是为了解决C语音的问题而创建的

问题:命名冲突


rand不能作为全局变量而创建,因为rand是一个函数名,已经定义于stdlib.h中,并且它也是全局的。同一个域中不能存在2个同名变量

值得注意的是,rand可以作为局部变量而创建,因为局部变量只能在局部域中使用,但是同名的全局函数不能再在局部域中使用。(这是否能说明局部域的优先级高于全局域呢)

为了解决这个问题,C++引入了命名空间(namespace)

命名空间为我们提供了一个域,域和域之间是相互独立的,就是说不同的域之间可以存在同名的变量。我们已知的域有,局部域、全局域、命名空间域

优先级:局部域>全局域

值得注意的是,编译器不会主动调动命名空间域中的值

程序打印了一串地址,说明了什么?说明命名空间域中的成员是需要我们主动调用的

打印了main函数中的0,这说明什么?说明编译器会优先调用局部域的成员

那么如何调用命名空间域中的成员呢?

1.using namespace [命名空间名] 将域中成员暴露到全局中

2.使用域作用限定符(::) [命名空间名]::成员 不将域中成员暴露到全局中,直接访问域中成员

当我们把命名空间域展开后,编译器提示我们rand不明确,可知命名空间域展开后成员被暴露至全局,而全局中有个rand函数,因此报错。所以正确的写法是

直接明确的指定出rand是tt域中的rand。

文章如有疏漏,望各位大佬在评论区不吝赐教!

相关文章
|
4月前
|
存储 安全 编译器
c++入门
c++作为面向对象的语言与c的简单区别:c语言作为面向过程的语言还是跟c++有很大的区别的,比如说一个简单的五子棋的实现对于c语言面向过程的设计思路是首先分析解决这个问题的步骤:(1)开始游戏(2)黑子先走(3)绘制画面(4)判断输赢(5)轮到白子(6)绘制画面(7)判断输赢(8)返回步骤(2) (9)输出最后结果。但对于c++就不一样了,在下五子棋的例子中,用面向对象的方法来解决的话,首先将整个五子棋游戏分为三个对象:(1)黑白双方,这两方的行为是一样的。(2)棋盘系统,负责绘制画面。
51 0
|
8月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
7月前
|
存储 分布式计算 编译器
C++入门基础2
本内容主要讲解C++中的引用、inline函数和nullptr。引用是变量的别名,与原变量共享内存,定义时需初始化且不可更改指向对象,适用于传参和返回值以提高效率;const引用可增强代码灵活性。Inline函数通过展开提高效率,但是否展开由编译器决定,不建议分离声明与定义。Nullptr用于指针赋空,取代C语言中的NULL。最后鼓励持续学习,精进技能,提升竞争力。
|
12月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
127 2
C++入门12——详解多态1
|
12月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
170 1
|
12月前
|
存储 安全 编译器
【C++打怪之路Lv1】-- 入门二级
【C++打怪之路Lv1】-- 入门二级
105 0
|
12月前
|
自然语言处理 编译器 C语言
【C++打怪之路Lv1】-- C++开篇(入门)
【C++打怪之路Lv1】-- C++开篇(入门)
132 0
|
12月前
|
分布式计算 Java 编译器
【C++入门(下)】—— 我与C++的不解之缘(二)
【C++入门(下)】—— 我与C++的不解之缘(二)
|
12月前
|
编译器 Linux C语言
【C++入门(上)】—— 我与C++的不解之缘(一)
【C++入门(上)】—— 我与C++的不解之缘(一)