草庐IT

初始化OpenStack

全部标签

c++ - 如何避免为聚合初始化重新输入类型信息?

我有以下示例:#includestructA{constchar*str;constchar*str2;};templatestructAs{std::arrayelems_;};templateAs(Args...)->As;//Linktonon-workingexample虽然此代码有效,但我想避免在聚合列表中“重新输入”A,但如果我将其遗漏,推导指南将失败:“cannot推导出'As'"的模板参数(我想这是有道理的)。也许解决这个问题的一种方法是手写我需要的任何数量的推导指南,从那时起我可以在每个推导指南中编写A类型(即:我需要的每个尺寸一个推导容器)。

c++ - Visual Studio 2017 允许在构造函数中使用自身初始化引用成员。它真的是合法的 C++ 吗?

我刚刚在我的代码中发现了一个非常危险的错误,我觉得它应该被编译器捕获。我错了吗?本质上,允许类的引用成员在构造函数中自行初始化。下面是在VisualStudio2017中编译而没有错误或警告的测试代码:structfoo{foo():reference(reference){}int&reference;};intmain(){foofooOb;}更新:我看到这里有一个2009年的类似问题。其他编译器在2017年的行为是否相同,还是VS2017问题?如果他们这样做了,这有点向我暗示这是合法的C++,但我不明白它怎么可能。 最佳答案

c++ - 初始化模板内部类的静态成员

我对在类模板中初始化静态成员所需的语法有疑问。这是代码(我尽量减少它):templatestructA{templatestructB{staticT1b;};Bb;typedefBBT;Tval(){returnb.b;}};templateTA::BT::b;structD{D():d(0){}intd;};intmain(){Aa;returna.val().d;}使用g++,我得到的错误是:error:toofewtemplate-parameter-lists关于如何初始化b有什么想法吗?请注意,我想保留typedef,因为在我的真实代码中,B比这复杂得多。

c++ - C++ 静态初始化在同一个回溯中出现两次是否正常?

我正在尝试调试使用GCC编译的C++程序,该程序在启动时卡住。GCCmutex保护函数的静态局部变量,似乎等待获取这样的锁是它卡住的原因。这是如何发生的相当令人困惑。第一个模块A的静态初始化发生(GCC调用的__static_init函数在回溯中可见),它调用具有静态局部变量的函数Foo()。静态局部变量是构造函数调用了好几层函数的对象,然后回溯突然有几个??的,然后它在第二个模块B的静态初始化中(__static函数再次出现),然后调用Foo(),但由于Foo()从未在第一次返回时本地静态变量上的互斥量仍然设置,因此它锁定。一个静态初始化如何触发另一个?我的第一个理论是共享库——模块

c++ - 在 C 中初始化一个 char 数组。哪种方式更好?

以下是初始化char数组的两种方式:charcharArray1[]="foo";charcharArray2[]={'f','o','o','\0'};如果两者等同,人们会希望每个人都使用上面的第一个选项(因为它需要更少的击键)。但是我看到过作者总是不厌其烦地使用第二种方法的代码。我的猜测是,在第一种情况下,字符串“foo”存储在数据段中,并在运行时复制到数组中,而在第二种情况中,字符存储在代码段中,并在运行时复制到数组中.出于某种原因,作者对数据段中的任何内容都过敏。编辑:假设数组声明为局部函数。问题:我的推理是否正确?您喜欢哪种风格?为什么? 最佳答案

c++ - 如何初始化数组并将指针传递给派生的基构造函数?

完全重写了问题。请仔细阅读请注意不要让您感到困惑:基本构造函数需要指向常量数组的指针。它本身不存储指针,它存储数据!我有以下代码:classBase{public:Base(int*);//addedthistoexplainwhyIneedinheritancevirtualvoidabstractMethod()=0;};Base::Base(constint*array){//justforexamplecout我想对派生类的用户隐藏Base(int*)构造函数。为此,我需要为该数组提供默认值。问题是当我像这样使用初始化列表时:Derived::Derived():Base(ne

c++ - 模板基类初始化

在visualc++中接受以下代码时,g++将生成错误:“类Derived没有任何字段名称Base”哪个符合标准?templateclassBase{public:Base(){};};templateclassDerived:publicBase{public:Derived():Base(){}};顺便说一句:两者都接受Derived():Base(){}所以同时,我会关注gcc 最佳答案 MSVC++不正确。Base是模板,不是类型。请注意,在通常情况下,Base在Derived的范围内查找,这意味着它将首先找到继承自Base

c++ - 静态对象如何在编译时初始化?

classBird{public:Bird(){..........}};voidfun(){staticBirdobj;}当编译器编译语句staticBirdobj时,它做了两件事。首先是对象obj的内存分配。其次是通过调用构造函数初始化obj。我的问题是如果初始化部分发生在编译时,构造函数中的所有语句将如何在编译时执行 最佳答案 WhencompilercompilesthestatementstaticBirdobjItdoes2thing.Firstismemoryallocationforobjectobj.Secondi

C++ 初始化列表

我必须用structMHD_OptionItem类型的元素填充std::vector。这个结构有这个实现:structMHD_OptionItem{enumMHD_OPTIONoption;intptr_tvalue;void*ptr_value;};我试过这种方式:vectoriov;if(...)iov.push_back({MHD_OPTION_NOTIFY_COMPLETED,requestCompleted,NULL});if(...)iov.push_back({MHD_OPTION_CONNECTION_TIMEOUT,connectionTimeout});[....]

c++ - 变量初始化(指针和值)

Foof1=Foo();//(1)OkFoof2=Foo;//(2)CompilererrorFoo*p1=newFoo();//(3)OkFoo*p2=newFoo;//(4)Ok.Why??我想知道为什么有两种初始化指针的方法。看起来有点不协调。是否有一些合乎逻辑的原因,如果有,是什么?或者,也许这是某种遗产?如果是这样,这种表示法的起源是什么? 最佳答案 至少可以说,这有点……复杂。在处理对象时,这两种表示法是等价的。在处理基本类型(如int)时,(3)会初始化(零填充)值,而(4)不会(该值将保留为未定义)。对于自动分配的对