草庐IT

初始化OpenStack

全部标签

c++ - 指针的值初始化在 C++ 中究竟做了什么?

看过相关回答here和here对此,但我想确认一下,因为他们都没有明确说明这一点。假设我有一个类Foo和一个类型为int*的成员bar。下面两个初始化是否完全等价?Foo::Foo():bar(NULL)//nullpointerconstantbymacro{}Foo::Foo():bar()//valueinitialization{} 最佳答案 指针的值初始化将其初始化为空指针值;因此两个初始化列表是等价的。指针没有类或数组类型,因此它们的值初始化是零初始化。(8.5p8)然后,(8.5p6)Tozero-initialize

c++ - 为什么在 C++11/C++14 中有针对自动和大括号初始化器的特殊类型推导规则?

在他的CppCon2014演讲中"TypeDeductionandWhyYouCare",ScottMeyers提出了一个问题,为什么在C++11/C++14标准中有关于auto和大括号初始化器的特殊规则(他的问题从at36m05s开始)。auto与braced-init-list组合的语义在§7.1.6.4/6中定义。我想了想,也想不出一个用例。到目前为止,我所看到的最接近的例子是BjarneStroustrup使用它的一个例子。在他的Cpp2014talk"MakeSimpleTasksSimple!",他曾经使用auto来捕获初始化器(但只是作为一种变通方法)。这是代码(幻灯片3

c++ - 在定义明确的函数参数列表中传递未初始化的变量吗?

我有一些代码基本上可以归结为以下内容:voidbar(boolb,doublef){if(b){doubleg=f;}}voidfoo(){doublef;boolb=false;bar(b,f);}这里有没有未定义的行为?我怀疑可能是因为我在将f传递给bar时获取了未初始化的double的值拷贝。也就是说,我没有使用传递的double,因为ifblock将不会运行。此外,如果我通过引用传递double是否一切都很好:voidbar(boolb,double&f)那么我不是在“使用”一个未初始化的变量,而只是引用它。 最佳答案 是的

c++ - 在 C++ 中使用隐式转换进行复制初始化

classFoo{public:Foo(floatb){}};classBar{public:Bar(Foofoo){}};intmain(intargc,char*argv[]){Barb1(3.0f);//accept,oneimplicitconvertionhappensthere.Barb2=3.0f;//error:noviableconversionfrom'float'to'Bar'return0;}为什么第二个表达式编译失败?我预计它会调用与第一个表达式相同的转换构造函数。 最佳答案 来自[dcl.init]:Ot

c++ - 内联变量被多次初始化

我看到一些inlineconst变量在visualstudio2017中被初始化(和销毁)3次的示例。这是链接器的错误吗?或者这应该以其他方式发生?链接器Comdat折叠设置为关闭。示例代码:#pragmaoncestructA{A(){staticintcount=0;++count;ASSERT(count==1);}~A(){}};inlineconstAa=A();在我的解决方案中,我有两次触发断言(一个构造函数被调用了3次)。检查调用堆栈显示所有调用堆栈都是相同的,并且所有调用都来自a()的动态初始化程序。现在我知道这个类没有用在解决方案的其他部分,因为我创建它只是为了调查这

C++ static const 和初始化(有没有惨败)

我在久违后重返C++,我对众所周知的静态初始化问题的理解有些磕磕绊绊。假设我有一个简单的类Vector2,如下所示(请注意,我知道x和y应该与getter和setter私有(private),为简洁起见,这些只是被省略了):classVector2{public:Vector2(floatx,floaty):x(x),y(y){};floatx,y;}现在,如果我想指定一个静态常量成员来表示x和y设置为1的Vector2,我不确定如何进行——静态常量成员是否会陷入静态初始化问题或让他们const意味着他们还好吗?我正在考虑以下可能性:可能性一://.hclassVector2{publ

c++ - 在 C++ 中初始化映射和删除的正确方法

我正在尝试创建在我的类的构造函数中声明的静态映射。该映射将在一种方法中初始化并填充数据,并在另一种方法中释放。这是正确的做法吗?usingnamespacestd;#includestructa{stringb;stringc;}classaClass:publicmyClass{public:aClass();virtual~aClass();private:mapmyMap;voidmethod(inta);voidamethod(intb);}voidaClass::method(inta){myMap=newmap;//Additionofelements;}voidaClas

c++ - 在循环中初始化变量

这个问题在这里已经有了答案:Declaringvariablesinsideloops,goodpracticeorbadpractice?(9个回答)关闭2年前。我试图弄清楚初始化某些变量时的最佳实践是什么......我的代码现在看起来像这样:intnHexCount=0;intprevState=sc.state;boolbOnlySpaces=true;boolbIsValidLabel=true;boolbIsHotstring=false;boolbIsValidName=true;boolbIsValidExpStart=false;boolfInExpression=fa

c++ - move 构造函数和初始化列表

我想为需要成为boost::unordered_map中的值类型的特定类型实现move构造函数(无复制构造函数).我们称这种类型为Composite.Composite具有以下签名:structBase{Base(..stuff,nodefaultctor):initializationlist{}Base(Base&&other):initializationlist{}}structComposite{Basemember;Composite(..stuff,nodefaultctor):member(...){}Composite(Composite&&other):member

c++ - 为什么非 const、非 int/enum 静态数据成员必须在定义之外初始化?

我知道只有静态、常量和int/枚举(c++11之前)的数据成员才能在类声明中初始化。“所有其他静态数据成员必须在全局命名空间范围内定义(即在类定义的主体之外)并且只能在这些定义中初始化”。为什么不能在类定义中初始化其他静态数据成员?是否有具体原因禁止这样做?如果数据成员特定于类,为什么它们在全局命名空间范围内声明,而不是在与其类相关的某些范围内声明? 最佳答案 Whycan'totherstaticdatamembersbeinitializedintheclassdefinition?Wasthereaspecificreason