草庐IT

initial_capacity

全部标签

c++ - std::initializer 列表全局/静态对象的生命周期

std::initializer_list主要用作类构造函数/函数参数,以便将列表元素复制到另一个容器中。但是如何使用std::initializer_list创建一个全局对象呢?例如:structElemType{constchar*name;boolflag;};std::initializer_listMyGlobalData={{"One",true},{"Two",false}};如果查看std::initializer_list模板定义(在VisualStudio2017中选中),它仅包含2个数据成员:const_Elem*_First和_最后。这意味着初始化列表数据应该存

c++ - 在 T 的构造函数中使用 *this = T() 将 "initialize"类型为 T 的对象安全吗?

构造函数Year()在这种情况下安全吗?structYear{intyear;Year(inty):year(y){}Year(){*this=Year(1970);}//*this=this->operator=(Year(1970));};Yeary;我认为是的,因为一旦执行流到达构造函数主体,year就已经用int()初始化了。还有其他问题需要考虑吗?不要考虑同样的技巧可能会引起麻烦的其他情况。 最佳答案 当然,thiswillwork,并且有效。说明在你的ctor-body运行时,所有的数据成员和基础都已经构建好了,并且:[

c++ - 仿函数和 initializer_list 的拷贝

我对复制仿函数和/或初始化器时发生的情况感到有点困惑。在下面的代码中,我认为我会一直复制/移动对象,但不管它是否存在段错误。我似乎做错了什么,但还没有弄清楚,我的错误假设是什么。奇怪的是,在cppreference.com我找不到initializer_list的复制或移动构造函数,所以我想知道在这些情况下实际发生了什么。#include#include#include#includestd::initializer_list>getInitializer(){return{[]()->std::string{return"If";}};}intmain(){std::function

c++ - 在模板函数中使用 initializer_list

我正在尝试使用函数模板foo将参数转换为initializer_list。但是,它转换的initializer_list具有与输入参数不同的奇怪值。#include#include#include#includeusingnamespacestd;templatevoidfunc(std::initializer_lista_args){if(a_args.begin()!=a_args.end()){autolast=prev(a_args.end());copy(a_args.begin(),last,ostream_iterator(cout,","));coutstructfi

c++ - std::initializer_list 作为构造函数的模板参数

考虑一个从std容器继承的类,该类具有调用容器底层构造函数的模板构造函数。此模板构造函数适用于简单的复制和移动构造函数,但不适用于initializer_list构造函数。templateclasstest:publiccontainer_T{public:usingcontainer_type=container_T;test(){}//templatedconstructortemplatetest(Tt):container_T(t){}//withoutthisitwon'tcompiletest(std::initializer_listl):container_T(l){}

c++ - 错误 : initialization with "{...}" expected for aggregate object - c++

structtest{unsignedinttest1;unsignedchartest2[4096];unsignedinttest3;}foostructfoobar{unsignedchardata[4096];}如果我想访问该结构,我会说foo.test1、foo.test2[4096]等。但是,当我希望以下列方式返回foo.test2中存在的数据时pac.datafoo=foo.test2[4096];unsignedchardata[4096]=pac.datafoo;这是我得到的错误:error:initializationwith"{...}"expectedforag

c++ - 在编译时将 initializer_list<T> 转换为 initializer_list<vector<T>>

我有一个类构造函数接受一个initializer_list这个构造函数必须运行接受一个的父类构造函数initializer_list>.所以我必须将初始化列表转换为二维初始化列表。{1,2,3,4}to{{1},{2},{3},{4}}编辑:我有一个类构造函数接受一个initializer_list这个构造函数必须运行接受一个的父类构造函数initializer_list>.所以我必须将初始化列表转换为二维初始化列表。{1,2,3,4}to{{1},{2},{3},{4}} 最佳答案 为什么不让您的子类获取参数包并将其转发给父构造函

C++ 构造函数 : Initialize local variable before initializer list

如何在构造函数中(在堆栈上)存储初始化列表所需的临时状态?例如,实现这个构造函数……//configabstraction.h#includeclassConfigAbstraction{public:ConfigAbstraction(std::istream&input);private:intm_x;intm_y;intm_z;};...使用这样的有状态助手类?//mysillyparserdontworry.h#include//jsoncppclassMySillyParserDontWorry{public:MySillyParserDontWorry(std::istre

c++ - string::capacity/reserve() 算作终止 null 吗?

从cppref对capacity()的描述来看并不明显和reserve()是否计算终止空字符。 最佳答案 标准statesthat:Inallcases,size().和size()不包括终止空值。因为有可能size()等于capacity(),在这种情况下,这意味着capacity()也不计算终止空值。请注意,在C++11及更高版本中,mystring.c_str()相当于mystring.data()相当于&mystring[0],和mystring[mystring.size()]保证是'\0'.检查这个Demo.

c++ - initializer_list 结合其他参数

假设我有一个类,它在构造函数中采用T类型的参数和U类型的参数集合。以下解决方案有效:structQ{Q(Tt,std::initializer_listus);};创建此类的实例将是:Qq{t1,{u1,u2,u3,u4}};但这对我来说看起来有点不干净。有比这个更好的解决方案吗? 最佳答案 您需要的是可变参数模板(c++11特性)。#includestructT{};structU{};classQ{public:templateQ(Tt,ArgTypes...args):Q(t,{args...}){}private:Q(Tt,