栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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


命名空间

c语言中如果出现

#include 
#include 

int rand = 0;

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

则会出现重命名的问题

运行之后结果如上图

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

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


C++解决了这个问题

C++关键字

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函数之前


  • 常用定义,指定隔离
#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;
}
  • 全部展开,隔离失效


  • 展开某一个
#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;
}


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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/629032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号