#includeiostream//c的输入输出using namespace std;//使用命名空间语法using namespace 空间名称;//将空间中的所有成员全部展开到此程序中//using 空间名称::成员;//将空间中的某一个成员展开//namespace U1 {// int x 10;// const int y 20;////}////main函数外部全局using名字空间则名字空间中的成员全为全局//using namespace U1;//int main()//{// cout x endl;// const int* p y;//}//namespace 名字空间//作用解决名字标识符可重用的问题//namespace定义语法namespce 名字{...}//在namespace名字空间中可以定义变量常量函数类...//同一个名字空间可以重复定义空间但成员不能重定义//编译器对于同一个名字空间编译时会自动合并到一起//namespace User1 {// double PI 3.1416;// int add(int a)// {// return a 100;// }//}//namespace User2 {// double PI 3.1415927;// int add(int a)// {// return a 10;// }//}//int main()//{// //访问名字空间中的成员// //语法空间名称::成员// cout 精度低的PI User1::PI endl;// cout 精度高的PI User2::PI endl;// cout User1::add(100) endl;// cout User2::add(10) endl;// return 0;//}//函数模版定义时以泛型替代实际类型在调用时具体化//函数模版也是函数重载的体现 每一个具体化都是函数的重载//函数模版的语法在函数上方去定义templatetypename|class 名字//函数模版在定义泛型时可以同时定义多个泛型使用分割/*templateclass T1,class T2,class T3T3 sub(T1 a, T2 b) { return a - b; }double ret subshort, int, double(10, 20);*///需要手动指定泛型的具体化类型名//templateclass T//T add(T a,T b) { return a b; }//int main()//{// cout add(1, 2) endl;//T具体化为int// cout add(1.25, 2.4) endl;//T具体化为double// cout addfloat(1.25, 2.4) endl;//调用时可以指定T的类型// return 0;//}//templateclass T1,class T2//T1 mul(T2 a, T2 b) { return a * b; }//short ret1 mulshort, char(10, 20);//int ret2 mulint, short(10, 20);//double ret3 muldouble, int(10, 20);//右值和左值引用 右值引用可以构造函数重载//值类别左值 右值//左值具名有名字可取地址有自己的存储空间 如普通变量 指针变量//右值不具名不可取地址 如常数表达式//左值引用对左值的引用//右值引用对右值的引用 但常引用认为左值引用//int main()//{// int a 10;//右值// int b a 10;//左值// int ar a;//ar是左值引用// const int r1 10;// const int* p r1;//r1左值引用//// //右值引用的语法 数据类型引用名右值// int r2 a 5 ? a - 5 : a;// int r3 10;// //r2 r3是左值// return 0;//}////在c编译器中写c程序如何让函数名进行粉碎////将函数定义或声明放在 externC{}//extern C//{// int add(int a, int b)// {// return 0;// }//}////int main()//{// add(1, 2);// return 0;//}//如何让函数不进行名字粉碎//使用extern C{},将函数定义到此语句块中即可//extern C {// int __cdecl add(int a, int b);//}////int main()//{// cout add(1, 2) endl;// return 0;//}
c++名字空间 函数模版 左右值
#includeiostream//c的输入输出using namespace std;//使用命名空间语法using namespace 空间名称;//将空间中的所有成员全部展开到此程序中//using 空间名称::成员;//将空间中的某一个成员展开//namespace U1 {// int x 10;// const int y 20;////}////main函数外部全局using名字空间则名字空间中的成员全为全局//using namespace U1;//int main()//{// cout x endl;// const int* p y;//}//namespace 名字空间//作用解决名字标识符可重用的问题//namespace定义语法namespce 名字{...}//在namespace名字空间中可以定义变量常量函数类...//同一个名字空间可以重复定义空间但成员不能重定义//编译器对于同一个名字空间编译时会自动合并到一起//namespace User1 {// double PI 3.1416;// int add(int a)// {// return a 100;// }//}//namespace User2 {// double PI 3.1415927;// int add(int a)// {// return a 10;// }//}//int main()//{// //访问名字空间中的成员// //语法空间名称::成员// cout 精度低的PI User1::PI endl;// cout 精度高的PI User2::PI endl;// cout User1::add(100) endl;// cout User2::add(10) endl;// return 0;//}//函数模版定义时以泛型替代实际类型在调用时具体化//函数模版也是函数重载的体现 每一个具体化都是函数的重载//函数模版的语法在函数上方去定义templatetypename|class 名字//函数模版在定义泛型时可以同时定义多个泛型使用分割/*templateclass T1,class T2,class T3T3 sub(T1 a, T2 b) { return a - b; }double ret subshort, int, double(10, 20);*///需要手动指定泛型的具体化类型名//templateclass T//T add(T a,T b) { return a b; }//int main()//{// cout add(1, 2) endl;//T具体化为int// cout add(1.25, 2.4) endl;//T具体化为double// cout addfloat(1.25, 2.4) endl;//调用时可以指定T的类型// return 0;//}//templateclass T1,class T2//T1 mul(T2 a, T2 b) { return a * b; }//short ret1 mulshort, char(10, 20);//int ret2 mulint, short(10, 20);//double ret3 muldouble, int(10, 20);//右值和左值引用 右值引用可以构造函数重载//值类别左值 右值//左值具名有名字可取地址有自己的存储空间 如普通变量 指针变量//右值不具名不可取地址 如常数表达式//左值引用对左值的引用//右值引用对右值的引用 但常引用认为左值引用//int main()//{// int a 10;//右值// int b a 10;//左值// int ar a;//ar是左值引用// const int r1 10;// const int* p r1;//r1左值引用//// //右值引用的语法 数据类型引用名右值// int r2 a 5 ? a - 5 : a;// int r3 10;// //r2 r3是左值// return 0;//}////在c编译器中写c程序如何让函数名进行粉碎////将函数定义或声明放在 externC{}//extern C//{// int add(int a, int b)// {// return 0;// }//}////int main()//{// add(1, 2);// return 0;//}//如何让函数不进行名字粉碎//使用extern C{},将函数定义到此语句块中即可//extern C {// int __cdecl add(int a, int b);//}////int main()//{// cout add(1, 2) endl;// return 0;//}