C++入门基础
一、C++的第一个程序
在创建 C++项目时,我们可以编写第一个C++程序。虽然C++兼容C语言绝大多数的语法,C语言实现的Hello World依旧可以运行,但在C++中需要将定义文件代码后缀改为.cpp,VS编译器看到是.cpp就会调用C++编译器编译,Linux下要用g++编译,不再是gcc。
规范的C++程序写法如下:
#include<iostream>
int main() {
std::cout << "Hello World" << std::endl;
return 0;
}
这里std::cout和std::endl涉及命名空间的概念,下面详细分析。
二、命名空间
1. namespace的含金量
在定义变量时难免会遇到名字冲突。例如库函数中的rand与自定义变量名冲突会导致报错。在C/C++中,变量、函数和类的名称都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
我们在使用标准库时,常在cout前加std::,这就是命名空间的使用方式。
2. namespace的定义
定义命名空间需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。
namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不再冲突。
#include<iostream>
using namespace std;
namespace jzx {
int rand = 10;
}
int main() {
cout << jzx::rand;
return 0;
}
C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
namespace只能定义在全局,当然它还可以嵌套定义。
#include<iostream>
using namespace std;
namespace jzx {
game {
grade = ;
}
work {
time = ;
}
}
{
cout << jzx::game::grade << endl;
x;
x = jzx::work::time;
cout << x << endl;
;
}

