作用:开发时就是各自使用独立的空间,便于联合开发
格式:
namespace 空间名
{
变量,函数,类等;
}
刚开始每次编写cpp时,都会出现 using namespace std;这句话的意思是把未指名空间的对象,指定到std空间中
- std是一个空间名
- c++中标准库的内容都存放到std空间中
什么时候调用std
c++为兼容C:做出以下调整(仅对空间这一点)调用标准库的内容时使用:例如使用 cout cin等
- 导入C的头文件可以不用命名空间
- 为了区分C的头文件 ,C++的头文件不使用 .h做后缀
- C++的头文件位于 std 命名空间中
//导入C的头文件可以不用命名空间 #includeint main() { printf("hellow"); return 0; }
使用命名空间的内容需要指名在那个命名空间使用: ::域解析操作符
- 格式: 空间名::(变量,函数,类等)
- 使用 using namespace 空间名; 把未指名空间的对象,指定到该空间
- usingusing namespace 空间名需要放置在定义空间位置后
includeusing namespace std; int main() { cout<<"hellow"< #include使用 using 的弊端: 当using的空间过多易产生二义性namespace p { int a; } int main() { p::a = 10;//需要指名空间 return 0; } #includenamespace p { int a; double b; char c; } namespace p1 { int a; double b1; char c1; } using namespace p; using namespace p1; int main() { a = 10;//不知道调用哪个a(存在二义性) 错误 return 0; } 为避免以上问题 可以对常用的一些 方法变量单独指名出来
using 空间名::变量,方法,等;(强烈推荐使用)
#include还有另一种情况:空间嵌套using p::a; namespace p { int a; double b; char c; } namespace p1 { int a; double b1; char c1; } int main() { a = 10;//正确 return 0; } 使用一: 用 ::限定空间使用
#include使用二: using namespace 空间名namespace s { int a; double b; namespace s1 { int a; double b1; } } int main() { s::a = 10;//直接用域限定空间 可以使用 s::s1::a = 20;//直接用域限定空间 可以使用 return 0; } 只会调用该空间的非嵌套内容 (不会使用嵌套空间的内容)
#include这里再作死一下,在提几种情况:using std::cout; using std::endl; namespace s { void text() { cout << "s" << endl; } namespace s1 { void text() { cout << "s1" << endl; } double p; } } using namespace s; int main() { text();//调用的是s中的,不是s1中的text() p=2;//错误,使用不了嵌套循环里面的对象 return 0; }
- 无法直接对 嵌套空间 用 using namespace (通俗的讲,没老子不能有儿子)
- 可以先对 外层使用 using namespace 然后再对内层使用using namespace
- 可以对 外层::内层 来使用内层空间 (仅导入内层,外层不能使用)
namespace s { int a; namespace s1 { int a; double p; } } using namespace s1;//错误不能这么定义namespace s { int a; namespace s1 { int a; double p; } } using namespace s; using namespace s1;//可以这么定义(但也是会出现二义性)namespace s { int a; namespace s1 { int a=10; double p; } } using namespace s::s1;//可以使用 仅导入s1c++11中using可以取别名:格式: using 新标识符 = 现有的类型;(常用于模板)模板时会介绍
#includeusing namespace std; typedef int p1; using p = int; int main() { p a = 10;//using 取别名 p1 b = 20;//typedef 取别名 return 0; } c++中特有的输入输出: 头文件为:#include
//包含输入输出流对象
- cin 输入流对象 输入时使用 >>
- cout 输出流对象 输出时使用 <<
cin 和cout 不是关键词 而是对象
>>和<<可以自行分析所处理的数据类型,使用更加简单
endl为换行,也可以使用'n'来换行
#includeusing namespace std; int main() { int a; cin >> a; cout << a< cin和cout 于 scanf和printf 的区别: scanf和printf 的区别: cout和printf的区别 :
- cin获取键盘输入: 将键盘输入的一系列数据转化为接受信息变量可接受的类型
- scanf是用指针操作的,没有类型安全机制,比如一个char类型数据你就可以用%f获得输入,而不会报错,但在运行时会出现异常
C++中内存开辟: malloc :
- cout是输出流,先把要输出的东西存入缓冲区,再输出,导致效率降低。
- printf是格式化输出,输出时没有缓冲区,输出效率高。
- cout不是线程安全的,printf是线程安全的,所以多线程程序,一般都用printf。
是C语言中的内存开辟的关键词,使用方式为:(C++也能使用)
类型 * 标识符=(类型 *)malloc(int size)
- malloc 默认返回 void * ,一般需要自己指定
- 清空内存使用 free();
- free(标识符)
#includenew:using namespace std; int main() { int *p = (int *)malloc(100); free(p); return 0; } 是C++语言中的内存开辟的关键词,使用方式为:
类型 * 标识符=new 类型(int size)
- new 会自动推导返回类型
- 使用 delete释放内存
- delete(标识符)
#includeusing namespace std; int main() { int *p = new int(5); delete(p); return 0; } int *p = (int *)malloc(4); 等价于(表面含义) int *p = new int(); int *p = (int *)malloc(4 * 10); 等价于(表面含义) int *p = new int[10];malloc和new的区别:内容太多,请点击下面链接:
c++ new和malloc的区别_旷工锁的博客-CSDN博客_c++ new和malloc的区别



