目录
1.命名冲突,
c++引入了namespace来解决这个问题,c语言没有
2.using namespace std
3.C++函数参数默认值设置
4.C++支持重载
1.命名冲突,
c++引入了namespace来解决这个问题,c语言没有
c++如下
namespace xxx {
int x = 0;
}
namespace 默认以局部变量优先(全局和局部变量比较)
加个 ::以全局变量优先,如 ::x
#include#include namespace me { int rand = 0; } int a = 0; int main() { int a = 1; printf("%pn", rand); printf("%dn", rand); printf("%dn", a); printf("%dn", ::a); //Domain-scoped qualifier 域作用限定符 }
那么如果我们要访问me这个域里面的变量呢?(int rand = 0 这个变量)
再::前面加个me就可以了, 这也从侧面显现了namespace 的命名很重要。
举个例子,大家一起写一份文件的时候难免会遇到变量重复的情况,这时候只要在把重复的变量放在个人专属的namespace中就可以避免重复而导致编译不过的问题。c++的优势。
#include#include namespace me { namespace Ding { int rand = 0; } namespace JJ { int rand = 0; } } int a = 0; int main() { int a = 1; printf("%dn", rand); printf("%dn", me::Ding::rand); printf("%dn", a); printf("%dn", ::a); //Domain-scoped qualifier 域作用限定符 }
命名空间也是能嵌套的
最后一点,如果不小心用了两个相同的命名空间,那么编译器会怎么办呢?
答:编译器不会报错,因为同一个工程允许存在相同的命名空间,编译器会把相同的命名空间合并到一起,形成一个新的命名空间
2.using namespace std
展开命名空间,可以做到少些几个子,但这是在没有变量相同的情况下才能这么做,不然还得老老实实写命名空间
#include#include namespace me { int a = 2; namespace Ding { int rand = 0; } namespace JJ { int rand = 0; } } using namespace me;//展开命名空间会使变量重复,就比如你的rand int a = 0; int main() { int a = 1; printf("%dn", rand); printf("%dn", Ding::rand); printf("%dn", a); printf("%dn", me::a); //Domain-scoped qualifier 域作用限定符 printf("%dn", a); }
如果把me::a的me::去掉的话,编译器会把a默认是局部变量(因为main函数内刚好有个局部变量----优先级最高)
所以 我们常看到 using namespace std;
这里的std实际上就是c++库的命名空间,
就像这句话
cout << "hello world" << endl;
如果不加using namespace std,这句话是无法通过编译的,要这么写
std::cout << "hello world" << std::endl;
当然你加了std的命名空间也能这么写,但是不推荐
或者你加那么std::cout 直接就能编译
这里有种骚操作
#include//using namespace std; 这里不放出来 int cout = 0; int main() { std::cout << cout << std::endl; return 0; }
这就是命名空间的优势。C++!
3.C++函数参数默认值设置
C++支持在声明并且定义的函数内对参数赋值,或者在声明的函数内赋值(定义的函数内不赋值)
,这样你在运用函数的时候不传参,编译器会自动使用对参数赋值的那个值
void function(int a = 1) {
cout << a << endl;
}
int main() {
function();
function(2);
return 0;
}
4.C++支持重载
话不多说,上图:
#includeusing namespace std; int add(int x, int y) { return x + y; } double add(double x, double y) { return x + y; } int main() { cout << add(1, 2) << endl; cout << add(1.1, 2.1) << endl; }
当然,C++不支持函数相同,参数不同的情况
参数不同:参数类型不同,参数顺序不同,参数个数不同
日后更新。



