c++名字空间 函数模版 左右值

#include<iostream>//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;

//}

//函数模版:定义时以泛型替代实际类型,在调用时具体化

//函数模版也是函数重载的体现 每一个具体化都是函数的重载

//函数模版的语法(在函数上方去定义):template<typename|class 名字>

//函数模版在定义泛型时可以同时定义多个泛型使用,分割

/*template<class T1,class T2,class T3>

T3 sub(T1 a, T2 b) { return a - b; }

double ret = sub<short, int, double>(10, 20);*///需要手动指定泛型的具体化类型名

//template<class 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 << add<float>(1.25, 2.4) << endl;//调用时可以指定T的类型

// return 0;

//}

//template<class T1,class T2>

//T1 mul(T2 a, T2 b) { return a * b; }

//short ret1 = mul<short, char>(10, 20);

//int ret2 = mul<int, short>(10, 20);

//double ret3 = mul<double, 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程序如何让函数名进行粉碎

////将函数定义或声明放在 extern"C++"{}

//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;

//}

相关推荐
集思广益的灰太狼29 分钟前
变频器启动致PLC数据异常?西门子G120配合滤波器EMC抑制方案
人工智能·算法·工控·emc·电磁兼容·变频器·西门子
孙克旭_39 分钟前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表
Titan202441 分钟前
HTTPS基础知识梳理
服务器·网络·c++·网络协议·学习·http·https
艾莉丝努力练剑43 分钟前
【AI大模型接入SDK】SSE协议
c++·学习·面试·大模型·sdk
斑马13944 分钟前
Linux软件编程学习笔记(五)——线程
开发语言·php
方方洛1 小时前
vllm教程-03-架构设计
算法·架构
玄昌盛不会编程1 小时前
LeetCode——2091. 从数组中移除最大值和最小值
java·算法·leetcode
吴声子夜歌1 小时前
Java——数组和集合(一)
java·开发语言
呆呆敲代码的小Y1 小时前
Lua 上值(UpValue)
开发语言·junit·lua·lua上值·upvalue
如何取名1 小时前
结合实际业务进行LRU淘汰算法优化设计(数据库开发日志)
数据库·算法