草庐IT

初始化OpenStack

全部标签

c++ - 动态初始化

C++03标准[basic.start.init]第3点指出:Itisimplementation-definedwhetherornotthedynamicinitialization(8.5,9.4,12.1,12.6.1)ofanobjectofnamespacescopeisdonebeforethefirststatementofmain.Iftheinitializationisdeferredtosomepointintimeafterthefirststatementofmain,itshalloccurbeforethefirstuseofanyfunctionoro

C++ 创建对象、初始化列表与赋值?

我最近与一位friend讨论,他们说在C++中创建对象时使用初始化列表(而不是简单地分配数据成员)会提高性能。这是为什么(如果是真的)?我找到了这个页面:http://www.parashift.com/c++-faq/init-lists.html他们提到了临时对象,但我认为最近的编译器可以避免这种情况? 最佳答案 使用赋值时,对象是在您进行赋值之前默认构造的。如果构造和复制一个对象是昂贵的操作,你至少应该去掉其中的一个。初始化列表摆脱了额外的复制操作。复制构建允许同时执行这两项操作。

c++ - constexpr、数组和初始化

C++世界中是否有任何东西可以使我尝试做的事情成为可能?templatestructarray{constexprTbuf[Size];constexprsize_tsize()const{returnSize;}};templateconstexprarraypush_back(arrayconst&arr,Tconst&val){arrayarr_out={{arr.buf,val}};returnarr_out;}我想做的是创建一个用另一个数组中的数据初始化的新数组,并在末尾放置一个新元素。减去constexpr我可以通过在push_back函数中循环初始化来让它工作。看起来你不

c++ - 如何初始化一个私有(private)嵌套类类型的静态字段?

Outer.hpp:classOuter{classInner{Inner(){}};staticInnerinner;}Outer.cpp(在顶层,例如不在函数体内):Outer::InnerOuter::inner;我收到以下错误:errorC2248:'Outer::Inner::inner':cannotaccessprivatememberdeclaredinclass'Outer::Inner'我没有使用完全符合C++11(VisualStudio2010)的编译器,因此无法在声明时定义字段。 最佳答案 诀窍是让Oute

c++ - 常规初始化中的意外转换

Clang3.2报错如下代码,不明白为什么会出问题。该错误仅发生在模板函数中,并且仅在使用大括号进行初始化时发生。其他两个初始化按预期工作。structfoo{foo(){}~foo()=default;//deletedfoo(constfoo&rhs)=delete;foo(foo&&rhs)noexcept=delete;autooperator=(constfoo&rhs)->foo&=delete;autooperator=(foo&&rhs)noexcept->foo&=delete;};templatevoidbar(){fooa;//OKfoob{};//ERROR}i

c++ - vector<bool> 可以由 int 初始化吗

我想枚举[0,31]的bool表示并将其存储在tries中供以后使用。staticconstintN=5;vectortries(N);for(inti=0;iinitializedbyint?//soIdon'thavetodobitoperationfor(intt=0;t 最佳答案 std::vector不能这样做,但是std::bitset能够。由于vector的大小在您的情况下是恒定的,因此您应该使用std::bitset.只需使用您想要的非负整数值对其进行初始化即可。请注意bitset不提供(或模仿)Container接

c++ - 原始类型初始化的构造函数语法和赋值语法之间的差异

这个问题在这里已经有了答案:Isthereadifferencebetweencopyinitializationanddirectinitialization?(9个回答)关闭9年前。阅读同事编写的一些代码时,我无意中发现了使用构造函数语法来初始化基本类型变量的方法。即如下所示:#includeintmain(){usingnamespacestd;//initializedusingassignementsyntax(copyinitialisation)inttiti=20;cout我的自然倾向是坚持使用赋值语法,因为它是历史悠久的语法,很容易理解,并且存在明显的兼容性问题(构造

c++ - 无法在 C++ 中初始化指针数组

我有一个指向名为“表”的结构(该结构称为节点)的指针数组。我在类中这样声明数组:Node*table;然后,在另一种方法中,我初始化表:this->table=newNode[this->length];一切正常。this->length是一个有效条目,this->table指向正确的数组,等等。但是,然后我尝试更改元素的值:for(inti=0;ilength;i++){this->table[i]=newNode;}甚至for(inti=0;ilength;i++){this->table[i]=0;}一切都开始出现问题。为什么我不能将这些指针设置为任何内容?这是我得到的错误:(其

C++:在初始化程序中类静态变量的定义中查找名称

我有简单的代码:#includeclassA{public:staticinta;};voida(){}intA::a=[](){static_assert(std::is_function::value,"'a'isnotafunction");return777;}();intmain(){return0;}在编译期间(使用g++4.8.1和clang3.4)关于'a'的getstatic断言错误不是函数。但是在assert内部,在decltype中我输入了'a'(它是一个函数)而不是A::a。编译器不应该采用函数(a)而不是类成员(A::a)吗?您能否在解释C++规范的地方给出任

c++ - 将大量数据初始化到 C++ 容器中的最佳方法?

例如:InitEmployee(){vectoremployeeList={Employee("ClarkKent",0),Employee("BruceWayne",1),...Employee("HalJordan",65535)}}我无法从文件或数据库中查询,因为该程序需要在单个可执行文件中,因此所有常量数据都必须进行硬编码。我实际上使用boost的multi_index_container通过名称和id进行快速查找,但为了简单起见,我在这里使用vector作为示例。问题是我不能在没有堆栈溢出的情况下在单个函数中拥有那么多(2^16)常量数据。有没有更好的方法在不拆分函数的情况下