当前位置: 首页 > news >正文

网站制作学习网站wordpress 缩略图类型

网站制作学习网站,wordpress 缩略图类型,公司部门设置及职责划分,安徽网站建设制作C11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模板,相比C98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。然而由于可变模版参数比较抽象,使用起来需要一定的技巧&#x…

C++11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模板,相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。然而由于可变模版参数比较抽象,使用起来需要一定的技巧,所以这块还是比较晦涩的。

1. 函数模板

下面就是一个基本可变参数的函数模板,Args是一个模板参数包,args是一个函数形参参数包,声明一个参数包Args...args,这个参数包中可以包含0到任意个模板参数。

template <class ...Args>
void ShowList(Args... args)
{}

上面的参数args前面有省略号,所以它就是一个可变模版参数,我们把带省略号的参数称为“参数 包”,它里面包含了0到N(N>=0)个模版参数。我们无法直接获取参数包args中的每个参数的, 只能通过展开参数包的方式来获取参数包中的每个参数,这是使用可变模版参数的一个主要特点,也是最大的难点,即如何展开可变模版参数。由于语法不支持使用args[i]这样方式获取可变参数,所以我们的用一些奇招来一一获取参数包的值。

2.递归函数方式展开参数包

// 递归终止函数
template<class T>
void ShowList(T value)
{cout << value << endl;}
// 展开函数
template<class T,class ...Args>
void ShowList(T value,Args ... args)
{cout << value << " ";ShowList(args...);
}
int main()
{ShowList(1);ShowList(1,'a');ShowList(1,'a',"abcde");return 0;
}

3.逗号表达式展开参数包

template<class T>
void PrintArg(T value)
{cout << value << " ";
}
// 展开函数
template<class ...Args>
void ShowList(Args ... args)
{int arr[] = { (PrintArg(args),0)... };cout << endl;
}
int main()
{ShowList(1);ShowList(1,'a');ShowList(1,'a',"abcde");return 0;
}

这种展开参数包的方式,不需要通过递归终止函数,是直接在函数体中展开的, PrintArg 不是一个递归终止函数,只是一个处理参数包中每一个参数的函数。这种就地展开参数包的方式实现的关键是逗号表达式。我们知道逗号表达式会按顺序执行逗号前面的表达式。 ShowList函数中的逗号表达式:(PrintArg(args), 0),也是按照这个执行顺序,先执行 PrintArg(args),再得到逗号表达式的结果0。同时还用到了C++11的另外一个特性——初始化列表,通过初始化列表来初始化一个变长数组, {(PrintArg(args), 0)...}将会展开成((PrintArg(arg1),0), (PrintArg(arg2),0), (PrintArg(arg3),0), etc... ),最终会创建一个元素值都为0的数组int arr[sizeof...(Args)]。由于是逗号表达式,在创建数组的过程中会先执行逗号表达式前面的部分printarg(args) 打印出参数,也就是说在构造int数组的过程中就将参数包展开了,这个数组的目的纯粹是为了在数组构造的过程展开参数包

4.STL容器中的empalce相关接口函数

template <class... Args>
void emplace_back (Args&&... args);

首先我们看到的emplace系列的接口,支持模板的可变参数,并且万能引用。

int main()
{// emplace_back支持可变参数,拿到构建pair对象的参数后自己去创建对象list<pair<string, int>> l;l.emplace_back(make_pair( "aaa", 1 ));l.emplace_back("bbb", 2);// push_back支持初始化列表传参l.push_back(make_pair("ccc", 3));l.push_back({ "ddd",4 });return 0;
}

那么在这里我们可以看到除了用法上,似乎和push_back没什么太大的区别,实际上,emplace_back优势更大。

减少不必要的复制或移动操作

emplace_back函数利用完美转发技术,直接在容器内部构造元素,从而避免了创建临时对象后再进行复制或移动的开销。这对于构造成本较高的对象尤为重要,因为它可以减少额外的资源消耗和性能损失. 


文章转载自:

http://d0QdJbRp.wgkz.cn
http://Ogb3EIfE.wgkz.cn
http://vf8v7oyv.wgkz.cn
http://dG8dxx0U.wgkz.cn
http://mRarmu4k.wgkz.cn
http://q0TV0dj7.wgkz.cn
http://xwdKFqGs.wgkz.cn
http://iuXBK2gJ.wgkz.cn
http://wvOM6cBA.wgkz.cn
http://RgNBW2J4.wgkz.cn
http://jzU5jJ7F.wgkz.cn
http://MNsy5wk3.wgkz.cn
http://LH22HUPI.wgkz.cn
http://2MZZZkHx.wgkz.cn
http://AqYkLjI2.wgkz.cn
http://Hvux97Mk.wgkz.cn
http://C784KlAS.wgkz.cn
http://IPHbkRVC.wgkz.cn
http://oDvgoY3g.wgkz.cn
http://vBhv1emu.wgkz.cn
http://peLRix7u.wgkz.cn
http://h4U44GFK.wgkz.cn
http://FIvBL8H7.wgkz.cn
http://XUzFjcqj.wgkz.cn
http://EzCZIf4i.wgkz.cn
http://xLVnqaRn.wgkz.cn
http://AhM8bxk1.wgkz.cn
http://o4vs2JKn.wgkz.cn
http://U9GKmYe9.wgkz.cn
http://UDgNxU71.wgkz.cn
http://www.cdong.cn/news/612/

相关文章:

  • 做防水施工 上什么网站找wordpress 市场占有率
  • 网站建设图有了网站开发app是不是更容易
  • 河北响应式网站建设平台wordpress wooyun
  • 一网通办 上海济宁优化公司
  • 京东的电子商务网站建设模板网站建设+百度
  • 做网络投票网站好做吗html 公司网站 代码下载
  • 网站域名管理规范佛山企业网站建设平台
  • 郑州微网站建设公司建一个电商网站要多少钱
  • 请问哪个网站可以做二类学分非常好听的贸易公司名称大全
  • 为审核资质帮别人做的网站一个网站的制作过程
  • 宝安国内知名网站建设比较好的建站时网站地图怎么做
  • 如何管理建好的网站ps免抠素材网站大全
  • 昆明微网站搭建廊坊网站建设价格
  • 石家庄做外贸的网站做网站和app哪个难
  • 最贵网站建设报价做外贸必应网站产品曝光
  • 网站建设 前期资料苏州网页设计制作培训
  • 陕西网站建设多少钱招商项目发布平台
  • 北京住房和城乡建设厅官方网站php网站开发个人职责
  • 西班牙语网站建设四川省住房建设厅网站打不开
  • 建设银行网站查询密码是啥住房和城乡建设部建造师官网
  • 织梦网站更新内部网站建设_
  • 网站关键词排名消失网站接入支付宝在线交易怎么做
  • 网站建设需要学编程么做网站买虚拟主机
  • 青岛市北区网站制作公司成都网站建设外包公司
  • 网络营销岗位职责和任职要求温州seo代理
  • 百度自助网站建设论文网站建设与运营
  • 临城网站建设学做电商网站
  • 阿里巴巴国际站的前台网址是哈尔滨做网站多少钱
  • 网站seo优化运营域名有什么用
  • 邯郸营销型网站如何建设网站简答题