一.命名空间
C语言中为避免冲突,可能采用
项目名_模块名_名字 的形式,缺点是冗长
C语言中作用域:块,局部(函数),文件,全局
C++有采用命名空间
用法1:using namespace MyNamespace;
namespace MyNamespace {
//可以做所有能在全局作用域中做的事
int val = 9;//全局
void f() {
}
struct MyStruct {
int age;
double score;
};
}
using namespace MyNamespace;
int main() {
val = 100;
f();
MyStruct str{ 1,1.1234 };
return 0;
}
int Foo() {
val = 100;
f();
MyStruct str{ 1,1.1234 };
return 0;
}
如果把using namespace MyNamespace;放在函数内部,则只在该函数内可见。
int main() {
using namespace MyNamespace;//把整个命名空间的所有名字导入当前作用域
val = 100;
f();
MyStruct str{ 1,1.1234 };
return 0;
}
int Foo() {
//本函数无法使用以下内容,编译出错
val = 100;
f();
MyStruct str{ 1,1.1234 };
return 0;
}
用法2:
int main() {
MyNamespace::val = 100;
MyNamespace::f();
MyNamespace::MyStruct str{ 1,1.1234 };
return 0;
}
用法3:
using MyNamespace::val;//把MyNamespace的val导入当前作用域
using MyNamespace::f;
using MyNamespace::MyStruct;
int main() {
val = 100;
f();
MyStruct str{ 1,1.1234 };
return 0;
}
命名空间可以不连续,可以写在多个文件中,例如:
namespace MyNamespace {
//可以做所有能在全局作用域中做的事
int val = 9;//全局
void f() {
}
struct MyStruct {
int age;
double score;
};
}
namespace MyNamespace {
//可以做所有能在全局作用域中做的事
double foo = 9;//全局
void g() {
}
}
命名空间可以嵌套:
namespace MyNamespace1 {
namespace MyNamespace2 {
namespace MyNamespace3 {
int age = 100;
}
}
}
int main() {
MyNamespace1::MyNamespace2::MyNamespace3::age = 0;
return 0;
}
命名空间可以取别名:
namespace MyNamespace1 {
namespace MyNamespace2 {
namespace MyNamespace3 {
int money = 100;
}
}
}
namespace Space = MyNamespace1::MyNamespace2::MyNamespace3;//取个别名,和命名空间原来的名字等价
using namespace Space;
int main() {
money = 0;
return 0;
}
using 指示可能会造成冲突:
namespace MyNamespace {
//可以做所有能在全局作用域中做的事
double foo = 9;//全局
void f() {
}
}
using namespace MyNamespace;
void f() {}
int main() {
//f();//二义性,编译器可以看见两个f(),不知道调用谁
MyNamespace::f();//明确指定调用MyNamespace的f()
::f();//明确指定调用全局命名空间的f()
return 0;
}
一.函数重载
C语言中函数不能同名
C++可以重载函数
构成函数重载的条件:
1.作用域相同
2同名函数
3参数列表不同,参数类型、个数、位置任意一个不同均可
3.1参数类型不同
void f(int) {}
void f(double) {}
3.2参数个数不同
void f(int) {}
void f(int, int) {}
3.3参数位置不同
void f(int, double) {}
void f(double, int) {}
4.返回值和调用约定没有效果
原文:https://www.cnblogs.com/Nutshelln/p/12848271.html