草庐IT

initializing

全部标签

c++ initializer_list 和 shared_ptr 行为

这个问题在这里已经有了答案:Doubledeleteininitializer_listvs2013(1个回答)关闭8年前。我正在测试vs2013c++initializer_list。下面的代码可以编译。但是当我运行exe时崩溃。#include#includeclassBase{};classDerived:publicBase{};voidDoSomething(std::initializer_list>list){}intmain(){autoip=std::make_shared();std::cout()});//ng//DoSomething({ip,std::make

C++11 "In class initialization"功能不适用于 union

最小代码示例:structB{unionU{structS{}s;inti=100;}u;};现在,如果我们声明一个Bobj;,那么obj.u.i会被分配一个垃圾值而不是100。查看demohere.(垃圾值因优化标志等而异)。“类内初始化”功能是否应该与union一起使用。如果是,那么正确的语法是什么?或者这是一个g++错误?如果不是,那么inti=100;做什么? 最佳答案 这看起来像一个GCC错误。标准说(9.5p2):Atmostonenon-staticdatamemberofaunionmayhaveabrace-or-

c++ - 使用 std::initializer_list 作为成员变量

这个问题在这里已经有了答案:Canitbesafetokeepacopyofanstd::initializer_list?Whatistherationale?(1个回答)关闭4年前。我有一个A类,它接受一个initializer_list并将其存储为一个成员变量。classA{public:A(std::initializer_listil):m_il(il){}std::initializer_listm_il;};另一个类B将A作为成员变量,默认使用initializer_list初始化classB{public:B(){std::cout现在,当我在main中运行这段代码时,

c++ - 错误 : Qualifiers dropped in binding reference of type x to initializer of type y

为什么下面会抛出这个错误:IntelliSense:qualifiersdroppedinbindingreferenceoftype"string&"toinitializeroftype"conststring".hclassA{public:wstring&GetTitle()const;private:wstringtitle;};.cppwstring&GetTitle()const{returnthis->title;}如果我删除const词,它就会停止提示,但我从未对变量进行任何更改? 最佳答案 通过返回对类成员的非c

c++ - initializer_list c++11 中的评估顺序

在下面的代码中,是否要求在f2之前调用f1(或反之亦然),还是未指定?intf1();intf2();std::initializer_listlist{f1(),f2()}; 最佳答案 这是C++标准的一个有趣的角落,其中执行顺序定义明确。第8.5.4节[dcl.init.list],第4段:Withintheinitializer-listofabraced-init-list,theinitializer-clauses,includinganythatresultfrompackexpansions(14.5.3),aree

C++ std::vector initializer_list 重载歧义 (g++/clang++)

考虑以下代码:#include#defineBROKENclassVar{public:#ifdefBROKENtemplateVar(Tx):value(x){}#elseVar(intx):value(x){}#endifintvalue;};classClass{public:Class(std::vectorarg):v{arg}{}std::vectorv;};无论BROKEN是否被定义,Clang++(7.0.1)编译它没有错误,但是如果BROKEN被定义,g++(8.2.1)会引发错误:main.cpp:9:20:error:cannotconvert‘std::vect

c++ - 可选地支持模板的 initializer_list 构造可能包装容器

如果我有一个包装标准容器的模板,似乎我可以相当轻松地委托(delegate)initializer_list构造函数:templatestructholder{Tt_;holder():t_(){}holder(std::initializer_listvalues):t_(values){}};例如,这与std::vector配合得很好。intmain(intargc,char*argv[]){holder>y{1,2,3};returnEXIT_SUCCESS;}但它很明显不适用于作为“int”的T或任何其他没有嵌套value_typetypedef的类型。因此,我想使用某种ena

c++ - 可以为 initializer_list 文字重载运算符吗?

这个问题在这里已经有了答案:InitializerlistsandRHSofoperators(1个回答)关闭5年前。我正在尝试为std::initializer_list重载运算符,但以下代码既不在GCC4.7.2也不在Clang3.2中编译:#includevoidoperator+(conststd::initializer_list&,conststd::initializer_list&);intmain(){{1,2}+{3,4};}13.5/6规定运算符函数应至少有一个参数,其类型为类、枚举或对其中之一的引用,标准将initializer_list指定为模板类,所以对我来

c++ - 在 clang 中返回 std::initializer_list

这个问题在这里已经有了答案:lifetimeofastd::initializer_listreturnvalue(2个答案)关闭7年前。考虑这个代码示例:#include#includeintmain(){for(autoe:[]()->std::initializer_list{return{1,2,3};}())std::cout我尝试用g++编译它(gcc版本4.9.2(Debian4.9.2-10))并且输出是正确的。在clang++(Debianclangversion3.5.0-9(tags/RELEASE_350/final)(basedonLLVM3.5.0))中输出

c++ - 使用 initializer_list 的模糊重载解析

我在VisualStudio上测试了以下代码,它编译并打印了“A(double)”。#include#includestructA{A(std::initializer_list){puts("initializer_list");}//(1)A(std::initializer_list){puts("initializer_list");}//(2)A(double){puts("A(double)");}//(3)};intmain(){Avar{1.1};}但是IntelliSense和http://ideone.com/ZS1Mcm不同意,说构造函数“A::A”的多个实例与参