草庐IT

NS_DESIGNATED_INITIALIZER

全部标签

c++ - initializer_list函数重载的解决

#includeusingnamespacestd;classA{public:explicitA(constinitializer_list&a){}};voidfunc(constvector&a){}voidfunc(Aa){}intmain(void){func({1,2,3});}此代码编译失败:(19):errorC2668:'func':ambiguouscalltooverloadedfunction(13):note:couldbe'voidfunc(A)'(9):note:or'voidfunc(conststd::vector>&)'with[_Ty=int](1

c++ - std::initializer_list<> 和一个引用参数

我刚开始使用初始化列表,我想知道它们的工作方式是否与其他STL容器相似。我的意思是他们复制值(value)观吗?我想做的是一个简单的min()函数,如下所示:templateT&minArgs(conststd::initializer_list&Arguments){constT*Smallest=Arguments.begin();for(constT*I=begin(Arguments);I!=end(Arguments);++I){if(*I然而,当我调用函数时,我从GCC得到了这个:error:'const'qualifierscannotbeappliedto'int&'我

c++ - 为什么存在 C++11 std::initializer_list 构造函数重载规则?

我似乎无法想到也找不到以下代码的理由:std::vectora{1,2}//calls(7)std::vectora(1,2)//calls(2)//constructorsfromhttp://en.cppreference.com/w/cpp/container/vector/vectorvector(std::initializer_listinit,constAllocator&alloc=Allocator());//(7)explicitvector(size_typecount,constT&value=T(),constAllocator&alloc=Allocator

c++ - 使用 std::initializer_list 的显式构造函数和初始化

classP{public:explicitP(inta,intb,intc){std::cout我认为{77,5,42}具有std::initialization_list的隐式类型.如果是这种情况,是什么原因导致变量z的构建失败?? 最佳答案 Ithink{77,5,42}hastheimplicittypeofstd::initialization_list{77,5,42}本身没有类型。如果你写autox={77,5,42}然后x类型为initializer_list.您的示例类型P有一个明确的构造函数。实际上,这意味着您必

c++ - 使用 std::initializer_list 构造函数而不产生歧义?

我有一个类叫做Shape,它可以从任何可迭代对象和一个名为Array的类中初始化,其中只包含一个Shape.但是,当我尝试初始化Array时,我遇到了无法解释的编译错误。:classShape{public:templateShape(Iteratorfirst,Iteratorlast):m_shape(first,last){}templateShape(constIterable&shape):Shape(shape.begin(),shape.end()){}templateShape(std::initializer_listshape):Shape(shape.begin(

c++ - 是数组 a<T, N> = { initializer-list };正确的语法?

在工作草案中http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3225.pdf23.3.2它说Anarrayisanaggregate(8.5.1)thatcanbeinitializedwiththesyntaxarraya={initializer-list};我会通过arraya={initializer-list};是正确的,有人可以解释一下这种奇怪的语法吗? 最佳答案 草稿有误。C++11标准的最终版本有arraya如您所料。

c++ - initializer_list 作为数组引用参数的参数?

下面对foo的调用是否有效?GCC似乎对此很满意,而Clang为foo给出了“无匹配函数”错误;以及无法推断出N的注释。templatevoidfoo(constint(&x)[N]){}intmain(intargc,char*argv[]){foo({1,2,3});return0;} 最佳答案 编辑:随着CWGissue1591决议的通过在委员会2014年11月的session上,现在允许使用OP中的代码。编译器现在可以推断出数组中元素的类型和数量。§14.8.2.5[temp.deduct.type]/p5:Thenon-d

c++ - 为什么 vector<double> 接受带有整数元素的 initializer_list?

#include#includeintmain(){//caseI:uniforminitialization//intii=100;//Error:cannotbenarrowedfromtype'int'to'double'//ininitializerlist//doubledd{ii};//caseII:initializer_list//std::vectorvecDouble{1,2.2};//fine!//caseIII:initializer_list//std::vectorvi={1,2.3};//error:doubletointnarrowing//caseIV

c++ - 为什么 std::initializer_list 会复制项目?

我一直认为std::initializer_list是一个轻量级代理对象,它只会从列表项中获取const引用,而不是复制它们。但是后来我发现在这种情况下实际上执行了复制:structTest{Test(){std::cout以上代码的输出:0x63e5acdadefaultctor0x63e5acdbdefaultctor0x63e5acdcdefaultctorforbegin0x63e5acddcopyctor0x63e5acdecopyctor0x63e5acdfcopyctorCurrent:0x63e5acddCurrent:0x63e5acdeCurrent:0x63e5a

c++ - 不可复制类型的 std::initializer_list 替代品

我知道尝试使用std::initializer_list导致错误,因为元素被复制到由initializer_list表示的临时数组中.我还阅读了一些解释,说明为什么在列表中使用右值引用是不对的,我对此很满意。问题是我想传递不可复制的东西不是为了从它们中移动,而只是想const-访问它们,因此关于右值的论点不适用。如果可能的话,我该怎么做才能保留列表初始化语法和引用语义(没有包装器,没有原始指针)?NonCopyablea{...},b{...};ListInitializedc{a,b};我想我在这里遗漏了一些非常明显的东西。更新:这行得通(*),ListInitialized(std