2-3 命名空间、基本输入输出精解

目录

命名空间

std::endl作用

标准输入cin

标准输出cout


命名空间

一、为什么使用命名空间

名称空间(namespace)被设计来克服这个困难,并被用作额外的信息来区分类似的函数、类、变量等等,它们在不同的库中具有相同的名称。使用名称空间,您可以定义定义名称的上下文。本质上,名称空间定义了一个范围。

二、命名空间的定义

在C语言中只有一个全局作用域:

1.C语言中所有的全局标识符共享一个作用域

2.标识符之间可能发生冲突
C++中提出了命名空间的概念:

1.命名空间将全局作用域分成不同的部分,
2.不同命名空间中的标识符可以同名而不会发生冲突
3.命名空间可以发生嵌套
4.全局作用域也叫默认命名空间
语法:

namespace Name
{
	namespace Internal
	{
		/*...*/
	}
	/*...*/
}

C++命名空间的使用:

使用整个命名空间:using namespace name;
使用命名空间中的变量:using name::variable
使用默认命名空间中的变量:  ::variable
#include <stdio.h>
#include <iostream>
namespace First 
{
	int i = 0;
}
 
namespace Second
{
	int i = 1;
 
	namespace Internal //嵌套命名空间
	{
		struct P  //嵌套命名空间
		{
			int x;
			int y;
		};
	}
}
 
int main()
{
	using namespace First; //使用整个命名空间
	using Second::Internal::P;  //使用嵌套的命名空间
 
	printf("First::i = %d\n", i);
	printf("Second::i = %d\n", Second::i);  //使用命名空间中的变量
 
	P p = { 2, 3 };
 
	printf("p.x = %d\n", p.x);
	printf("p.y = %d\n", p.y);
 
	system("pause");
	return 0;
}

 

为了防止名字冲突而引入的一种机制,一个项目中可以有多个命名空间,每个命名空间都哟自己的名字,不可以同名。

代码示例:

pro1.h:

namespace pro1 { //在这里声明这个命名空间,并且在里面声明一些函数
	void test1();
	void test2();
	void test3();
}

pro1.cpp:

#include<cstdio>
 
namespace pro1 {  //在这里定义pro1.h中命名空间pro1中声明的test3函数
 
	void test3() {
		printf("我是test3\n");
	}
}

pro2.cpp:

#include"pro1.h"
 
#include<iostream>
using namespace std;
 
namespace pro1 {  //在这里为命名空间添加一个test4函数
	void test4() {
		printf("我是test4\n");
	}
}
 
int main()
{
	pro1::test1();
	pro1::test2();
	pro1::test3();
	pro1::test4();
 
	return 0;
} 
  • 命名空间可以是不连续的,可以写在一个项目中的多个文件中
  • 命名空间一般在.h文件中声明一些函数然后在.cpp文件中定义这些函数
  • 使用命名空间有两种方法,第一种是使用域运算符 ::  ,第二种是使用   using namespace 命名空间,当两个命名空间中有相同的函数,则必须使用第一种调用方法

std::endl作用:

   1)  输出换行符 \n
   2)  强制刷新 输出缓冲区,缓冲区所有数据都被系统清除了
          输出缓冲区:一段内存,cout输出的时候实际是往输出缓冲区输出内容,那么输出缓冲区什么时候把内容输出到屏幕去的            呢?
a)缓冲区满了。
b)程序执行到main函数return语句了。
c)调用了std::endl了, 能够强制刷新输出缓冲区(把缓冲区的内容往屏幕上出输出)。
d)当系统不太繁忙的时候,发现新内容也会正常输出到屏幕(这也就是为什么只用\n也可以起到刷新内容到屏幕的原因)

https://www.cnblogs.com/aquester/p/11850495.html深度

标准输入cin

std::cin 是一个标准输入,与之配合的是输入运算符>>,每次执行完<<后就会返回这个标准输入,所以我们一次可以输入多次内容

标准输出cout

int i = 3 ;
std::cout << i-- << i--; //2,3 vs2012中 从右往左算 而vs2017为 3,2
//不同的编译器 有不同的结果 不应写这种很暧昧的代码
//要避免 在一个表达式中多次的(超过一次的)改变一个变量的值 

//如果要多次改变
i--;
std::cout << i;
i--;
std::cout << i;
//这样就很明确。

注释:
1.<< , >> 两个运算符都是overload运算符,所以可以处理不同类型的输入值。
2.std::cout是一个template函数 相当于一个函数指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值