【C++】命名空间 + 输入输出流

最近在准备考试,就随便写点吧

文章目录

    • 命名空间
      • 1. namespace
      • 2. 作用域限定符 ::
      • 3. 命名空间的使用
      • 4. 命名空间嵌套使用
      • 5. 命名空间命名重复
    • 二、C++输入输出
      • 1. C++库的头文件
      • 2. 输入输出流


命名空间

c语言中如果出现

#include 
#include 

int rand = 0;

int main()
{
    printf("%d", rand);
    
    return 0;
}

则会出现重命名的问题

【C++】命名空间 + 输入输出流_第1张图片

运行之后结果如上图

  • 同一作用域中不能出现相同变量

  • 在stdlib.h文件中已经定义了rand变量


C++解决了这个问题

C++关键字

【C++】命名空间 + 输入输出流_第2张图片

1. namespace

在C/C++中,函数和类的名称存在于全局作用域中,可能会导致很多冲突。

使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字的出现就是针对这种问题的

  • 在不同的作用域里定义变量相互不影响
  • 类似全局变量和局部变量一样,但优先使用局部变量(局部域中变量)
  • 命名空间必须是定义在全局的

2. 作用域限定符 ::

#include 
#include 
namespace n1
{
	int rand = 0;

}

int main()
{
    //用n1作用域中的变量
	printf("%d", n1::rand);

	return 0;
}

之前在c语言中,局部变量和全局变量同时存在的时候

如果要使用全局变量

printf("%d", ::rand);
//rand前面空表示用全局变量中的参数

3. 命名空间的使用

  • 不能在命名空间中进行赋值操作
  • 本质是全局变量,放在静态区
  • 初始化在main函数之前

【C++】命名空间 + 输入输出流_第3张图片


  • 常用定义,指定隔离
#include 
#include 

namespace n1
{
	int rand = 0;
    
    int add(int x, int y)
    {
        return x + y;
    }
    
    struct str
    {
        int a;
        struct str* node;
    };
}

int main()
{
    //用n1作用域中的变量
    n1::rand = 2;

    //函数调用
    n1::add(1, 2);

    //结构体
    struct n1::str s;
    s.a = 0;

	return 0;
}

  • 不用作用域限定符,using namesapce
#include 
//#include 
namespace n1
{
    int rand = 0;
}
using namespace n1;

int main()
{
    rand = 1;
	return 0;
}
  • 全部展开,隔离失效

【C++】命名空间 + 输入输出流_第4张图片


  • 展开某一个
#include 
//#include 
namespace n1
{
    int rand = 0;
    int a = 2;
}
using n1::rand;

int main()
{
    rand = 1;
	return 0;
}

4. 命名空间嵌套使用

#include 
#include 
namespace n1
{
    int rand = 0;
    namespace n2
    {
        int rand = 2;
    }

}

int main()
{
    //嵌套
    n1::rand = 1;
    n1::n2::rand = 10;

	return 0;
}

5. 命名空间命名重复

  • 不会出现问题,只是在编译的时候合并在一起
#include 
#include 
namespace n1
{
    int rand = 0;
    namespace n2
    {
        int rand = 2;
    }

}

namespace n1
{
    int b = 0;
}

int main()
{
    //命名重复
    n1::rand = 1;
    n1::b = 4;
	return 0;
}

二、C++输入输出

1. C++库的头文件

类似c语言中的stdio.h

  • C++库的头文件在iostream中(输入输出流)
#include 
using namespace std;

int main()
{
	int a = 10;

	cout << a << endl;

	return 0;
}
  • 这里的C++库的实现的定义在std这个标准的命名空间中
  • 这样就防止你定义的变量和库里面的变量冲突的问题
  • 但依然存在问题就是在大的工程项目中,如果依然这样使用,可能会造成问题
  • 所以还是建议用局部命名空间或者作用域限定符指向命名空间

2. 输入输出流

  • 使用cout标准输出(控制台)cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。

  • 这两个都可以自动识别类型

  • endl相当于\n

#include 
using namespace std;

int main()
{
	int a = 10;

	cin >> a;
	cout << a << endl;

	return 0;
}

【C++】命名空间 + 输入输出流_第5张图片


如果要控制小数点位数,还是建议用printf


你可能感兴趣的:(C++,programing,langua,c++,命名空间,namespace)