草庐IT

initialization

全部标签

c++ - 为什么 C++ 允许将 std::initializer_list 强制转换为基本类型,并用于初始化它们?

这个问题是关于std::initializer_list,以及为什么它被允许初始化原始类型。考虑以下两个函数:voidfoo(std::stringarg1,boolarg2=false);voidfoo(std::stringarg1,std::dequearg2,boolarg3=false);为什么会这样,当这样调用foo时:foo("somestring",{});选择了第一个重载,而不是第二个?好吧,实际上不是为什么它被选中,而是因为{}可用于初始化任何,包括原始类型。我的问题是这背后的原因。std::initializer_list采用{args...},因此在编译时不能有

c++ - 推导容器和 initializer_list-s 的模板函数

我想编写一个辅助函数,例如:templateautohelper(constRange1&left,constRange2&right,F&&pred){usingnamespacestd;//forcbegin/cendandADLreturnpred(cbegin(left),cend(left),cbegin(right),cend(right));}它适用于容器:std::vectorv1={1,2,3,4,5,6};std::vectorv2={5,4,3,2,1,6};std::cout但它无法推断出initializer_list-s(example):std::cout

c++ - 是否可以在初始化 C++2a 类非类型模板参数时省略类型名称?

以下在GCC9.1(支持类非类型模板参数)上无法编译structS{inti;};templatestructT{};intmain(){Tx{};}编译器报告error:couldnotconvert'{0}'from''to'S'尽管有模板参数s混凝土类型S.Tx{};按预期工作,但C++2a是否允许具体类型名称S被省略,就像语言的其他部分一样? 最佳答案 willC++2aallowtheconcretetypenameStobeomitted?否。[temp.arg.nontype]/2Atemplate-argumentf

c++ - `invalid initialization of non-const reference` 是什么意思?

编译此代码时,我得到以下error:Infunction'intmain()':Line11:error:invalidinitializationofnon-constreferenceoftype'Main&'fromatemporaryoftype'Main'这是我的代码:templatestructMain{staticMaintempFunction(){returnMain();}};intmain(){Main&mainReference=Main::tempFunction();//我不明白为什么?谁能解释一下? 最佳答案

c++ - 如何在 C++ 中初始化静态结构?

我已经设法初始化正确的任何基本类型的变量(即int、char、float等),但是当声明一个小的复杂变量时,我只能看到错误。在头文件timer.h中声明classAndroidTimerConcept{...private://structthatholdsthenecessaryinfoforeveryeventstructResources{timer_delegate_tmembFunct;void*data;intsize;millis_ttime;};//declaringanarrayof10ResourcesstructsstaticstructResourcesResD

c++ - 装饰器设计模式,函数bug

这是家庭作业...我不是在寻求答案,我只是遇到了一个错误,我不确定该如何处理。谢谢!有问题的错误可能与作业本身无关,但无论如何这里是作业描述:我正在做一项作业(用C++编写),旨在通过带浇头的比萨饼的经典示例来教授装饰器设计模式的使用。(我的教授也可能直接从http://simplestcodings.com/2010/12/26/decorator-design-pattern-example-ni-c/中提取它)。我遇到了一个小问题,想知道是否有人可以帮助我。我有一个主菜单(披萨店)对象,它接受用户的输入并对披萨执行所需的操作。用户从一个基本的披萨开始,然后可以在上面添加配料,直到

c++ - `constexpr` 变量 "used in its own initializer": Clang vs. GCC

这个问题似乎与anexistingone有关,但我不明白theanswerthere中提供的“可移植解决方法”(涉及constautothis_=this;)而且我认为下面的例子更容易理解。我正在使用以下C++17代码片段(livedemo):#includestructTest{constchar*name_{nullptr};constTest*src_{nullptr};constexprTest(constchar*name)noexcept:name_{name}{}constexprTest(constTest&src)noexcept:src_{&src}{name_=s

c++ - 直接初始化与直接列表初始化 (C++)

直接VS复制初始化通过这个问题(Isitdirect-initializationorcopy-initialization?)我了解了直接初始化和复制初始化之间的区别:direct-initializationcopy-initialization--------------------------------------------objs("value");objs=obj("value");objs="value";objs{"value"};objs={"value"};objs=obj{"value"};为了完整起见,我在这里提到它。我对此页面的实际问题在下一段中列出>>直

c++ - 错误 C2536 : cannot specify explicit initializer for arrays in Visual Studio 2013 的解决方法

下面的代码不能用VisualStudio2013编译,而它应该:classA{A():m_array{0,1,2}{}//errorC2536:'A::A::m_array':cannotspecifyexplicitinitializerforarraysprivate:intm_array[3];};参见bugreport了解更多详情。有哪些可能的解决方法? 最佳答案 如评论所述,您可以尝试此解决方法。classA{A():m_array({0,1,2}){}private:std::arraym_array;};似乎VS201

c++ - 什么语言规则允许 C++11 推断这是一个 initializer_list 对?

在C++11中,初始化std::map似乎是合法的如下:std::mapmyMap={{"One",1},{"Two",2},{"Three",3}};直觉上,这是有道理的——大括号括起来的初始化器是一个字符串对列表,std::map::value_type是std::pair(可能具有一些const资格。但是,我不确定我是否理解此处的输入方式。如果我们在这里去掉变量声明,只用大括号括起来的初始化器,编译器就不会知道它正在查看std::initializer_list>。因为它不知道括号对代表std::pair秒。因此,编译器似乎以某种方式推迟了将类型分配给大括号括起来的初始化程序的行