草庐IT

初始化OpenStack

全部标签

c++ - 在 main() 消失之前初始化的值

无法理解奇怪的程序行为-希望有人能解释一下。虚拟.h:#ifndefDUMMY_H#defineDUMMY_H#includeclassDummy{intval;public:intInit(intnew_val){returnval=new_val;}intGet(){returnval;}Dummy():val(-1){std::cout标题.h:#include"dummy.h"externDummydummy;虚拟.cpp:#include"dummy.h"Dummydummy;主要.cpp:#include#include"header.h"intres1=dummy.Ini

c++ - 全局指针是否初始化为零?

我想知道cpp标准对全局初始化是怎么说的。我找到了this回答很有帮助,但没有提到指针类型。能否保证这会奏效?char*myptrintmain(){if(myptr==NULL){std::cout 最佳答案 是的,在命名空间范围(在您的情况下为全局命名空间)定义的指针保证被初始化为该类型的正确空指针值。对于标准引用,3.6.2[basic.start.init]/2"Variableswithstaticstorageduration...shallbezero-initialized(8.5)"8.5[dcl.init]/6"

c++ - 如何在编译时初始化一个 float 组?

我发现了两种在编译时初始化整数数组的好方法here和here.不幸的是,两者都不能直接转换为初始化float组;我发现我不太适合模板元编程,无法通过反复试验来解决这个问题。首先让我声明一个用例:constexprunsignedintSineLength=360u;constexprunsignedintArrayLength=SineLength+(SineLength/4u);constexprdoublePI=3.1415926535;floatarray[ArrayLength];voidfillArray(unsignedintlength){for(unsignedinti

c++ - 下面的初始化是如何良构的?

[class.conv.ctor]/2中的示例包含以下初始化:Za3=Z(1);//OK:directinitializationsyntaxused这如何被视为直接初始化语法? 最佳答案 Z(1)将直接初始化纯右值。prvalue然后将用于初始化对象。通过rulesofguaranteedelision,没有临时后跟拷贝。纯右值直接初始化对象。因此,Za3=Z(1);完全等同于Za3(1);。在C++17之前的版本中,这将执行纯右值临时变量的直接初始化,然后将临时变量(几乎肯定会被删除)复制到对象a3中。无论拷贝是否被省略,纯右值

c++ - 显式初始化 std::optional 时,我应该使用 nullopt 吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion安std::optional可以像这样初始化为脱离状态:std::optionaloi{nullopt};但也像这样:std::optionaloi{};赋值也是如此(oi={}或oi=nullopt)。除了个人喜好/美感之外,这两者之间是否存在差异,使我更喜欢其中之一?还是根本不重要?注意:我问的是我想显式初始化可选的情况,而不是默认初始化它(例如为了强调)。

c++ - 在初始化列表中初始化引用

我被告知必须在初始化列表中初始化引用变量,但为什么这是错误的?classFoo{public:Foo():x(0){y=1;}private:int&x;inty;};因为0是一个临时对象?如果可以,引用可以绑定(bind)什么样的对象?可以带地址的对象?谢谢! 最佳答案 0不是左值,而是右值。您无法修改它,但您正在尝试绑定(bind)到可以修改它的引用。如果您将引用设置为const,它将按预期工作。考虑一下:int&x=0;x=1;//wtf:(这显然是不行的。但是const&可以绑定(bind)到临时值(右值):constint

c++ - 构造函数初始化列表顺序/分配问题

我的问题很简单,下一段代码安全吗?structParent{B*_a;Parent(B*a):_a(a){}};structChild:publicParent{B_b;Child():Parent(&_b),_b(2){};};intmain(){Childc;return0;}还有两点:我对将对成员对象的引用传递给父对象的部分很感兴趣。我所说的安全是指_b将被分配(及其内存地址),并且无论我使用哪种编译器,此代码都可以正常工作。提前致谢。澄清我所说的安全实际上是指内存地址是有效的,因为我已经知道它没有被初始化。其他注意事项在我的实际代码中,我想将B类型的对象存储为指向其基类A的指针

c++ - 如何在单例模式中初始化类成员?

我有一个遵循单例方法的类,但是如果它的构造函数是私有(private)的,我应该在哪里初始化类成员?classMyClass{MyClass(){};//constructorisprivateMyClass(constMyClass&);MyClass&operator=(constMyClass&);public:staticMyClass&Instance(){staticMyClasssingleton;returnsingleton;}}; 最佳答案 您可以照常在构造函数中初始化类成员,甚至是私有(private)的。构造

c++ - 指针的初始化

我目前对以下语句感到困惑-我虽然该语句会在编译时产生错误,但它不会。//statement1:someclass*q(someclass());如果是这样的话我明白了//statement2:someclass*q(&someclass());我想知道为什么声明1不会产生错误,或者即使它是有效的(我在幕后遗漏了什么吗?) 最佳答案 Iwouldliketoknowwhystatment1doesntgenerateanerrororevenifthatisvalid第一个语句是有效的,尽管它可能没有按照您的预期进行:此语句声明了一个

c++ - 使用 std::begin 和 std::end 进行 vector 初始化

为什么可行?有两个不同的字符串"testString"但vector大小分配正确。#include#include#includeintmain(){std::vectorstr;str.assign(std::begin("testString"),std::end("testString"));copy(str.begin(),str.end(),std::ostream_iterator(std::cout,""));std::cout 最佳答案 你很幸运,编译器执行了stringpooling优化。请注意,您所做的仍然是未定