【C++】基础
左移和右移左移 n → 等于 乘以 2 的 n 次方右移 n → 等于 除以 2 的 n 次方向下取整int i 3; i 1; //相当于 3*2的一次方 6 int a 2; a 1; //相当与2 / 2的一次方 1namespace的定义定义命名空间需要使⽤到namespace关键字后⾯跟命名空间的名字然后接⼀对{}即可{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等namespace本质是定义出⼀个域这个域跟全局域各⾃独⽴不同的域可以定义同名变量C中域有函数局部域全局域命名空间域类域域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑所有有了域隔离名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑还会影响变量的⽣命周期命名空间域和类域不影响变量⽣命周期namespace只能定义在全局当然他还可以嵌套定义命名空间的使用方法命名冲突在同一个范围里出现两个一模一样的名字编译器分不清你要用哪一个直接报错称为命名冲突。//命名空间只能定义在全局 namespace ywx { int rand 10; } int main() { printf(%p\n, rand); //全局的 printf(%d\n, ywx::rand); //ywx 类域的 return 0; }全局 / 局部变量 和 作用域限定符::优先级当全局变量和局部变量同名是编译器优先调用局部变量变量查找规则先找局部域再找全局域想访问全局::变量名:: 域作用限定符命名空间::成员::全局变量namespace ywx { int a 429; } //全局变量 int a 985; int main() { //局部变量 int a 211; //当全局变量和局部变量同名是优先调用局部变量 cout a endl; // :: 是作用域限定符 cout ::a endl; //加上作用域限定符后访问全局的a //访问类域中的变量 cout ywx::a endl; return 0; }命名可放的成员变量函数结构体 / 类类型别名其他命名空间//命名空间中可以放函数 结构体 //命名空间的嵌套 namespace ywx { int add(int left, int right) { return left right; } struct Node { int val; struct Node* next; }; int a 10; namespace ywx_1 //命名空间的嵌套 { int a 20; } } int main() { cout ywx::add(1, 2) endl; //调用命名空间里的函数 struct ywx::Node* p1; //定义命名空间里的结构体变量 cout ywx::a endl; //打印命名空间ywx里的变量a cout ywx::ywx_1::a endl; //打印命名空间ywx里命名空间ywx_1的变量a return 0; }