草庐IT

初始化OpenStack

全部标签

c++ - 当参数是初始化列表且参数是引用时的重载解析

structA{A(int);};structB{explicitB(A);B(constB&);};Bb({0});我问了一个问题Overloadresolutiongetsdifferentresultbetweengccandclang和@JohannesSchaub-litb解释了活跃的规则。但是我对13.3.3.1.4Referencebinding还有一些疑问。N452713.3.3.1.5[over.ics.list]p1和p81Whenanargumentisaninitializerlist(8.5.4),itisnotanexpressionandspecialru

C++ - 如何反复重新初始化对象?

我正在尝试用C++实现这个逻辑:Objectobj(args);while(obj.isOK()){obj=obj.next();}但我不能使用这个确切的代码,因为Object继承了boost::noncopyable所以它没有赋值运算符。我可以向Object添加方法和构造函数(但不能使其可复制),但我不想这样做。其他问题有手动销毁和放置new作为解决方案,如果我为Object创建一个新的构造函数,我可以这样做,但同样,最好我不需要新的构造函数,这看起来像无论如何,这是非常讨厌的解决方案。我有什么选择? 最佳答案 使Object::

数组的 C++ 构造函数初始值设定项

我正在使用C++11,我想在构造函数的初始化列表中初始化一个对象数组。我找到了一个相关的问题,但它不符合我的需求:我希望数组对象的类是不可复制的。我希望数组对象的类有一个析构函数。编译:classfoo{public:foo(int&n):i(n){}//~foo(){}//Ifuncommented,itdoesn'tcompile.private:int&i;//Disablecopyconstructorandassignmentoperator.foo(constfoo&)=delete;foo&operator=(constfoo&)=delete;};classbar{pu

c++ - "Naked function cannot contain objects that would require unwinding..."静态初始化变量

我在使用VisualStudio15编译某些东西时遇到了问题。这段代码说明了这一点:constchar*getx(){return"foo";}void__declspec(naked)nf(){staticconstchar*x=getx();}失败并出现以下错误:错误C3068“nf”:“裸”函数不能包含在发生C++异常时需要展开的对象。不过,我真的不明白为什么会失败;静态对象不是自动的,就存储而言,它们的行为或多或少像全局对象,并且在执行入口点之前被初始化(据我所知)。如果是这样,那么这条消息指的是什么展开?此时堆栈上没有任何内容,所以没有什么可以放松的。此外,如果我删除函数调用

c++ - 用实际元素初始化 boost::multi_array 的干净方法

我正在寻找干净的语法糖来从显式值初始化boost::multi_array。我能想到的最好的办法是doubleg[5][5]={{-0.0009,0.003799,0.00666,0.00374,0.00186},{-0.0008,0.0176,0.0619,0.0159,0.00324},{0.00099,0.0475,0.666,0.0376,0.00758},{0.00242,0.02189,0.0624,0.0192,0.0008},{0.00182,0.00404,0.00479,0.00924,0.00189}};boost::multi_array_refmg((doub

c++ - 利用容器的移动语义和元素初始化

经常看到使用STL算法的示例用列表初始化容器来说明,例如:std::vectorv{1,2,3,4};但是当这种方法用于(重量级)类(不像ints)时,它意味着过度的复制操作,即使它们被传递给右值(移至),因为上面示例中使用的std::initializer_list仅提供const_iterator。为了解决这个问题,我使用了以下(C++17)方法:templateContainermake_container(Args&&...args){Containerc;(c.push_back(std::forward(args)),...);//((c.insert(std::cend(

c++ - 初始化列表中元素的评估顺序

为什么函数g()先被调用?我将g()定义为初始化列表中的第二个元素。标准中与初始值设定项列表相关的以下引述是否相关?§8.5.4.4:Withintheinitializer-listofabraced-init-list,theinitializer-clauses,includinganythatresultfrompackexpansions(§14.5.3),areevaluatedintheorderinwhichtheyappear.#include#includeintf(){std::coutv){}intmain(){h({f(),g()});}输出:gf

c++ - IO 完成端口初始读取和双向数据

我有以下简化的IO完成端口服务器C++代码:intmain(..){startCompletionPortThreadProc();//Awaitclientconnectionsockaddr_inclientAddress;intclientAddressSize=sizeof(clientAddress);SOCKETacceptSocket=WSAAccept(serverSocket,(SOCKADDR*)&clientAddress,&clientAddressSize,NULL,NULL);//ConnectedCreateIoCompletionPort((HANDLE

c++ - 如何理解在某些情况下允许实现将非局部变量的动态初始化视为静态初始化?

其实问题出在标准草案N4582中的话:[basic.start.static/3]Animplementationispermittedtoperformtheinitializationofavariablewithstaticorthreadstoragedurationasastaticinitializationevenifsuchinitializationisnotrequiredtobedonestatically,providedthat—thedynamicversionoftheinitializationdoesnotchangethevalueofanyothe

c++ - 模板类中的静态变量初始化

谁能解释为什么这段代码会崩溃?使用mingw和ubuntu的两个窗口上的行为相同。每个调试器传递给构造函数One的参数“a”被“优化掉”。当我尝试访问静态成员two_时发生崩溃;三.h#ifndefTHREE_H#defineTHREE_H#includeclassOne{public:One(conststd::string&a):a_(a){}std::stringa_;};templateclassTwo:publicOne{public:Two():One(P::name){}std::stringfoo(){returna_;}};templateclassThree{pub