草庐IT

初始化OpenStack

全部标签

c++ - 最令人烦恼的解析阻止了类内初始化 std::vector<int>

这个问题在这里已经有了答案:Whycan'tmemberinitializersuseparentheses?(2个答案)关闭4个月前。C++11允许类内初始化:structFoo{std::vectorv{3};//vectorof3emptystrings};如果我们想在类中初始化一个intsvector,我们会得到其他东西:structFoo{std::vectorv{3};//vectorofoneelementwithvalue3};这个问题好像是语言的限制,asdiscussedinpreviousquestions.但是,如果这不是类内初始化,我们将能够使用圆括号而不是大

C++0x 静态初始化和线程安全

我知道在C++03标准中,函数范围的静态初始化不保证是线程安全的:voidmoo(){staticstd::stringcat("argent");//notthreadsafe...}随着C++0x标准最终提供标准线程支持,函数范围的静态初始化是否需要线程安全? 最佳答案 似乎初始化是线程安全的,因为在进入函数时动态初始化对象的情况下,它保证在临界区执行:§6.7stmt.decl4。...这样的对象在控件第一次通过其声明时被初始化...如果控件在初始化对象时并发进入声明,则并发执行应等待初始化完成.../p>有一个潜在的边缘情况

Kotlin类的解析(构造函数,构造函数的参数,类的属性get set方法,init块,延迟加载,懒加载,初始化对象时的调用次序)--Kotlin新手Tip1

Kolin类*创建方式*构造函数构造函数的参数init块*属性的修饰*getset方法懒加载延迟加载*初始化对象时的调用次序*创建方式Kotlin中类和JAVA中类的创建方式相同Class+类名进行创建。例:classMyClass(){}构造函数Kotlin中构造函数分为两种主构造函数Kotlin在定义类时不一定有主构造函数(例如密封类,或想要实现单例用private修饰constructor),主构造函数是在创建对象时调用的函数,可以有参数也可以无参数。但如果有参数则必须在创建时初始化参数。Kotlin中主构造函数只有一个其紧跟类名后面用constructor修饰classMyClassc

c++ - 为什么在大括号初始化中允许在参数列表中使用额外的逗号?

跟进我的一个老问题(Isthereanyrelevancetoanextra","intheendofabraceinitialization?)是否有任何技术原因导致函数声明和函数调用中的参数列表没有像大括号初始化那样对代码生成友好?我的意思是:没关系,多余的,被忽略了:intgenerated_array[]={1,2,3,};为了保持一致性,允许这样做不是也有意义吗?intsomeFunc(intv1,intv2,intv3,){...}intret_val=someFunc(1,2,3,);我看不出它会如何使编译变得更复杂,但也许有些事情我没有想到。我猜它实际上会稍微简化它。当

c++ - 全局变量0-初始化惩罚

这是一个非常简单的问题:0初始化全局变量和静态变量在运行时是否有任何性能损失(尽管非常小)? 最佳答案 不,因为C++(和C)标准规定所有未由程序员显式初始化的全局/静态变量必须初始化为零。这些变量被放置在一个名为.bss的特殊段中。在调用main()之前将它们初始化为零。如果您显式初始化全局/静态,但将值设为0,编译器会足够聪明地意识到这一点,并仍将其放在bss段中。你可以用这样的例子自己测试一下:#includestaticintuninit;staticintinit_zero=0;staticintinit_one=1;in

c++ - 为什么在 std::vector 的初始化列表中调用复制构造函数?

我有以下非常简单的类:classFoo{public:Foo(){}Foo(constFoo&)=delete;Foo(Foo&&){}voidoperator=(constFoo&)=delete;voidoperator=(Foo&&){}voiddump()const{}};该类是可move构造和可赋值的,但不是可复制构造和可赋值的。我想使用vector的初始化列表来初始化Foo元素的vector。std::vectorvf={Foo()};编译器会报错,因为代码必须使用已删除的复制构造函数。谁能解释一下,为什么在这种情况下不使用move构造,为什么需要对象的拷贝?以下也需要复制

c++ - 静态初始化顺序失败

在他的“ThinkinginC++”(第10章)中,Eckel描述了一种由JerrySchwarz开创的技术来解决这个惨败。他说如果我们想将x初始化为100并将y初始化为200并在所有翻译单元之间共享它们,我们创建一个如下所示的Initializer.h:externintx;externinty;classInitializer{staticintinitCount;//if(initCount++==0)x=100&y=200/*...*/};staticInitializerinit;在实现文件中我们有#include"Initializer.h"intx;inty;intIni

c++ - cout 是否保证在静态去初始化期间可用?

我有一个准单例类(准单例在大多数情况下指的是单个对象是一个静态函数,但用户也可以构建自己的本地拷贝以供短期使用)我想要从其析构函数写入cout,并想知道cout是否保证在程序终止后的静态去初始化阶段可用。来自thisquestion似乎答案是肯定的(函数静态初始化对象的析构函数应该从它们构造时的相反顺序调用,这应该是在cout设置之后),但我想检查一下。//Countcallstoaloggingfunctionfromsomepointinourcode,todetermine//howmanytimesitgetsexecutedduringarun,thenreportcalls

C++初始化列表:探索多种初始化方式

C++中的初始化列表是一种方便且强大的工具,用于在创建对象时初始化成员变量。初始化列表在C++中广泛应用于各种类型的对象,包括数据成员、静态成员、常量成员等。初始化列表的主要优势在于,它允许程序员在对象创建时指定初始值,而不是在构造函数中。这可以提高效率,并减少因多次构造而产生的开销。以下是一些常见的初始化方式:直接赋值这是最简单的初始化方式,直接在类定义中为成员变量赋值。例如:classMyClass{inta=10;//直接赋值初始化};构造函数初始化列表这是使用构造函数初始化列表来初始化成员变量。这种方式可以保证成员变量在构造函数体执行之前被正确初始化。例如:classMyClass{i

c++ - constexpr 用指针初始化

我正在尝试使用指向int的指针来初始化constexpr声明,int是一个const对象。我也尝试用一个不是const类型的对象来定义一个对象。代码:#includeintmain(){constexprint*np=nullptr;//npisaconstanttointthatpointstonull;intj=0;constexprinti=42;//typeofiisconstintconstexprconstint*p=&i;//pisaconstantpointertotheconstinti;constexprint*p1=&j;//p1isaconstantpointe