C++修炼之练气期一层——命名空间

简介: C++修炼之练气期一层——命名空间

0000000000000.png

目录


1.引例

2.命名空间的定义

3.命名空间的使用

4.命名空间使用注意事项


正文


1.引例


#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{
    printf("%d\n", rand);
    return 0;
}

当我们用C语言写下这样的代码,看着并没有什么语法问题,但是当编译时,就会出现这样的报错:

1.png

经过查询后才发现,原来 rand 是一个库函数我们并不能使自己的变量名与之相同。


这可麻烦了,到了工作时,我们面对海量的代码,势必会有各种各样相同的变量名字或函数名造成命名冲突,我们总不能一个一个改过去吧,那么有什么办法可以解决这一问题呢?


答案是肯定的,这就是接下来要讲到的命名空间(namespace)。


2.命名空间的定义


定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员(类似于结构体的样子);

//该命名空间的名字为hxy(花想云)
namespace hxy
{
    //定义自己的变量、函数等
  int rand = 10;
  void qsort(int* a, int n)
  {
    //...
  }
  struct Node
  {
    int val;
    struct Node* next;
    //...
  };
}

命名空间可以嵌套;

namespace hxy
{
  int rand = 10;
  namespace hxy2
  {
        int rand = 20;
    namespace hxy3
    {
      //....
    }
  }
}

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

//test.cpp中定义
namespace hxy
{
  int rand = 10;
  void qsort(int* a, int n)
  {
    //...
  }
  struct Node
  {
    int val;
    struct Node* next;
    //...
  };
}
//test.h中定义
namespace hxy
{
  int sum = 0;
  int add(int a, int b)
  {
    //...
  }
}
//两个hxy会被合并成为一个


3.命名空间的使用


命名空间的使用有 3 种方式:

加命名空间名称及作用域限定符(::);

namespace hxy
{
  int rand = 10;
  void qsort(int* a, int n)
  {
    //...
  }
  struct Node
  {
    int val;
    struct Node* next;
    //...
  };
}
int main()
{
  printf("%d\n", hxy::rand);
  return 0;
}

使用using将命名空间中某个成员引入;

using  hxy::rand;
int main()
{
  printf("%d\n",rand);
  return 0;
}

使用using namespace 命名空间名称引入;

using  namespace hxy;
int main()
{
  printf("%d\n", rand);
  return 0;
}


4.命名空间使用注意事项


我们可能经常见到这样的语句:

using namespace std;


它告诉编译器在当前代码块中使用标准命名空间(namespace)std中的标识符 。

标准命名空间std是C++标准库的命名空间,包含了很多常用的函数和对象,例如输入/输出操作(cout、cin)、字符串处理、数学运算等。

使用using namespace std可以使代码更简洁易读,但可能会导致命名冲突或歧义

实际开发项目的过程中,我们一般使用

1.域作用限定符访问

#include <iostream>
int main()
{
    //cin、cout为C++中常用的输入输出语句
    //end暂且可理解为作用与'\n'相同
  std::cout << "hello world" << std::endl;
  return 0;
}

2.部分常用展开使用

using std::cout;
using std::endl;
int main()
{
  cout << "hello world" << endl;
  return 0;
}

在日常的代码练习中,为了方便可使用

3.全局展开

using namespace std;
int main()
{
  cout << "hello world" << endl;
  return 0;
}
目录
相关文章
|
1天前
|
C++ 开发者
C++程序命名空间
C++程序命名空间
9 1
|
4天前
|
编译器 C++
C++入门(命名空间)
C++入门(命名空间)
|
6天前
|
自然语言处理 编译器 C语言
【C++】C++ 入门 — 命名空间,输入输出,函数新特性
本文章是我对C++学习的开始,很荣幸与大家一同进步。 首先我先介绍一下C++,C++是上个世纪为了解决软件危机所创立 的一项面向对象的编程语言(OOP思想)。
36 1
【C++】C++ 入门 — 命名空间,输入输出,函数新特性
|
6天前
|
存储 C++ 容器
【C++从练气到飞升】09---string语法指南(二)
【C++从练气到飞升】09---string语法指南(二)
|
6天前
|
存储 Linux C语言
【C++从练气到飞升】09---string语法指南(一)
【C++从练气到飞升】09---string语法指南(一)
|
6天前
|
编译器 C++
【C++从练气到飞升】08---模板
【C++从练气到飞升】08---模板
|
6天前
|
存储 Linux C语言
【C++从练气到飞升】07---内存管理
【C++从练气到飞升】07---内存管理
|
6天前
|
Java C++ Python
【C++从练气到飞升】06---重识类和对象(二)
【C++从练气到飞升】06---重识类和对象(二)
|
6天前
|
编译器 C++
【C++从练气到飞升】06---重识类和对象(一)
【C++从练气到飞升】06---重识类和对象(一)
|
6天前
|
编译器 C语言 C++
【C++从练气到飞升】05---运算符重载(二)
【C++从练气到飞升】05---运算符重载(二)