命名空间(namespace)
在我们学习C语言的过程中,如果我们命名一些和库函数名字相同的变量或者函数,VS编译器就会报错,怎么解决这个问题呢?C++语言就推出了一个关键字
namespace
这个关键字的作用就是解决命名冲突的
未使用关键字:
#include<stdio.h> #include<stdlib.h> int rand = 0; int main() { printf("%d", rand); return 0; }
是会报错的,因为命名和库函数rand冲突了,我们在后面写的代码越多,就越容易命名冲突,
使用关键字:
#include<stdio.h> #include<stdlib.h> namespace ncon { int rand = 0; } int main() { printf("%d", ncon::rand); return 0; }
::
这个符号叫域作用限定符
就是告诉VS编译器rand这个变量要在ncon命名的空间里面找,否则是找不到这个rand的
在命名空间里面可以定义函数、结构体、变量、枚举…等,
#include<stdio.h> #include<stdlib.h> namespace ncon { int rand = 0; int Add(int a, int b) { return a + b; } typedef struct numnam { int a; int b; }numname; } int main() { printf("%d ", ncon::rand); int count = ncon::Add(1, 2); printf("%d ", count); struct ncon::numnam num = { 10,20 }; printf("%d %d", num.a, num.b); return 0; }
注意一下,结构体的写法是struct关键字在 最前面
命名空间里面嵌套命名空间
#include<stdio.h> #include<stdlib.h> namespace ncon { namespace con { int nums = 10; } } int main() { printf("%d ",ncon::con::nums); return 0; }
命名空间可以嵌套命名空间,无限套娃
命名空间的合并
我们在一个源文件中可以多个位置命名空间相同的名字,是不会冲突的,会合并成一个命名空间
头文件:
#include<stdio.h> #include<stdlib.h> namespace ncon { typedef struct numnam { int a; int b; }numname; }
目标文件.c
#include"day1_1.h" using namespace ncon; namespace ncon { int Add(int a, int b) { return a + b; } } int main() { int count = Add(1, 2); printf("%d ", count); struct ncon::numnam num = { 10,20 }; printf("%d %d ", num.a, num.b); return 0; }
有人就会发现下面这句代码
using namespace ncon;
这句代码想表达的意思就是
这行代码是C++中的语法,意思是引入命名空间 ncon 中的所有内容,使得在代码中可以直接使用该命名空间中的成员而不需要加上前缀
注意:这种方式不提倡,特别是在项目里会造成不必要的麻烦,所以日常练习可以展开
std:是C++官方库定义的命名空间
但是有时候真的很麻烦,会写很多不必要的前缀
所以我们可以指定展开
using std::cout; using std::endl;
第一个c++代码
#include<iostream> int main() { std::cout << "hello world"; printf("hello world"); return 0; }
<< : 流插入
如果要写入一些标识符,如\n
#include<iostream> int main() { std::cout << "hello world\n" << "hello " << "11111 " << "\n"; printf("hello world"); return 0; }
可以写多个 << 进行拼接
但是一般不会这样写,会写成是std::endl
#include<iostream> int main() { std::cout << "hello world" << std::endl << "hello " << "11111 " << std::endl; printf("hello world"); return 0; }
<< :流提取
#include<iostream> using std::cout; using std::endl; using std::cin; int main() { int a = 10; int b = 20; cin >> a >> b; cout << a << endl << b; return 0; }
std:: cin :输入
std::cout : 输出
C++初阶------------------入门C++(二)