双冒号运算符

  • 双冒号运算符加在输出变量前面是说明要输出全局变量,抛弃就近原则
  • std::cout就是打开std的一扇门,使用里面的cout输出方法
int i = 0;

void test(){
	int i = 10;
	cout << i << endl;//0
	cout << ::i << endl;//0
}

int main(){
	test();
	return 0;
}

using编译指令

#include<iostream>
#include <cstring>

#include "test.h"
using namespace std;

namespace Tomcat {
    int a = 20;
}

void test(){
    int a = 10;
    using Tomcat::a;
    cout << a << endl;//这里出现了二义性,就是就近原则和命名空间冲突
    //所以在using声明的时候要避免二义性
}

int main() {
    test();
    return 0;
}
  • 下面这种写法只是打开了房间,但输出的还是按照就近原则
  • 此时如果删除局部变量,输出的就是Tomcat命名空间的值
  • 此时如果在add code here..这行加入namespace,就会产生编译报错,这种情况下就写Tomcat::a写明要使用的房间
void test(){
    int a = 10;
    using namespace Tomcat;
	//add code here..
    cout << a << endl;//这里出现了二义性,就是就近原则和命名空间冲突
    //所以在using声明的时候要避免二义性
}