草庐IT

初始化OpenStack

全部标签

c++ - 带虚函数的类的大括号初始化

有这段代码:structA{intx;voidf(){}};structB{inty;virtualvoidf(){}};Aa={2};//Bb={3};error:nomatchingconstructorforinitializationof'B'intmain(){return0;}为什么变量a的初始化有效,但变量b的初始化无效? 最佳答案 A是一个集合,因此可以进行大括号初始化,而B不是,因为它有一个虚方法。8.5.1聚合Anaggregateisanarrayoraclass(Clause9)withnouser-prov

c++ - 逗号作为变量初始化中的分隔符(不是作为运算符)

这似乎是一个简单的问题,但我已经很久没有以自己的方式检查过这个问题了……当初始化用逗号分隔的变量时,我假设以下是不安全的做法:unsignedintn=foo.size,nxn=n*n;因为我从来没有真正使用逗号运算符来表示句法糖等;而是表明两个表达式是独立的——作为一种对“细粒度并行性”(或表达式独立性)的隐式注释,这通常会使代码更简洁,例如,if()a=true,b=value;而不是为分号分隔的表达式要求{}范围。但我的问题实际上是重新检查变量初始化的情况。我的假设是否不正确nxn不能依赖于按预期进行初始化?还是我一直都在误解中苦苦挣扎? 最佳答案

C++ - 成员初始化和递增的顺序

我一直在寻找一些测试来提高我的C++知识。这是练习之一:以下程序的输出是什么?#includeclassA{public:A(intn=0):m_i(n){std::cout嗯,我试过这段代码,答案是02002。我来这里是为了解释一下,因为我不明白为什么02002是结果。我会解释我的推理,但有人可以告诉我我哪里错了吗?让我们将要打印的当前字符串称为“str”。当构建b对象时:A的构造函数被调用。str=>0,m_i=>1构建m_a(newA[2])。str=>000构建m_x(++m_i)。str=>0002,m_i=>3str的最后更新(在B的构造函数中)=>str=>00023这是

c++ - 如何初始化一个类的引用成员变量?

考虑以下C++代码:#includeusingnamespacestd;classTest{int&t;public:Test(int&x){t=x;}intgetT(){returnt;}};intmain(){intx=20;Testt1(x);cout使用gcc编译器时出现如下错误est.cpp:Inconstructor‘Test::Test(int&)’:est.cpp:8:5:error:uninitializedreferencemember‘Test::t’[-fpermissive]为什么编译器不直接调用Constructor? 最佳答案

c++ - 数组的 constexpr 初始化以对内容进行排序

这有点像一个谜而不是一个现实世界的问题,但我已经遇到了这样一种情况,我希望能够编写一些行为完全相同的东西templatestructSortMyElements{intdata[N];templateSortMyElements(TT...tt):data{tt...}{std::sort(data,data+N);}};intmain(){SortMyElementsse(1,4,2,5,3);intse_reference[5]={1,2,3,4,5};assert(memcmp(se.data,se_reference,sizeofse.data)==0);}除了我想要SortM

c++ - 如何在Qt中初始化拆分器句柄位置?

我想像下面这样初始化拆分器handle位置,而不是在中间。我无法在属性中设置它。如何解决?感谢您的帮助。 最佳答案 您可以使用QSplitter::setSizes来重新定位句柄:ui->splitter->setSizes(QList() 关于c++-如何在Qt中初始化拆分器句柄位置?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/25063003/

c++ - 初始化 boost::scoped_ptr 数组的正确方法?

我有一个类,其中有一个范围指针数组,这些指针指向没有默认构造函数的对象。我发现“初始化”它们的唯一方法是像这样使用swap():classBar{Bar(char*message){};}classFoo{boost::scoped_ptrarr[2];Foo(){arr[0].swap(boost::scoped_ptr(newBar("ABC")));arr[1].swap(boost::scoped_ptr(newBar("DEF")));};}这感觉有点冗长和笨拙。我错过了更聪明的方法吗? 最佳答案 arr[0].reset

c++ - 在 C 或 C++ 中使用多个地址运算符将指针初始化为指针

我突然想到我不知道如何用C++中的一条语句从非指针值初始化指向指针的指针:inta=1;int**ppa=&&a;//Doesnotcompileint**ppa=&(&a);//Doesnotcompileint*pa=&a;//Worksbutisaint**ppa=&pa;//Twostepsolution我是否遗漏了什么,这两个陈述是唯一的方法吗? 最佳答案 如果你想要一个指向指针的指针,你想要指向的指针必须位于内存中的某个地方,所以我认为不可能有“一步解决方案”,因为你需要一个可以指向的指针变量.(注意:这句话并不是要在一

c++ - 为什么未初始化的全局变量是弱符号?

似乎未初始化的全局变量在Gcc中被视为弱符号。这背后的原因是什么? 最佳答案 gcc,C模式:未声明extern的未初始化全局变量被视为“通用”符号,而不是弱符号。公共(public)符号在链接时合并,以便它们都引用相同的存储;如果不止一个对象试图初始化这样一个符号,您将得到一个链接时错误。(如果它们没有在任何地方显式初始化,它们将被放置在BSS中,即初始化为0。)gcc,在C++模式下:不一样-它不做常见符号的事情。未声明为extern的“未初始化”全局变量被隐式初始化为默认值(简单类型或默认构造函数为0)。无论哪种情况,弱符号都

C++ GNU 指定的结构初始化在 Eclipse 中无法识别

CDT解析器报告结构初始化的语法错误:typedefstructMyStruct{inta;floatb;};intmain(void){//GNUCextensionformatMyStructs={a:1,b:2};//C99standardformat//MyStructs={.a=1,.b=2};return0;}同时GCCliststhe:formasobsolete,它似乎没有被弃用或删除。在C99中我肯定会使用标准.=形式,但对于C++,:是我所知道的用于指定初始化的唯一选项。我已经尝试将我的工具链设置为MinGW和CrossGCC,但似乎都不起作用。如何让Eclipse