草庐IT

Initialization

全部标签

c++ - 海湾合作委员会 : C++11 inline object initialization (using "this") does not work when there is a virtual inheritance in hierarchy

当在初始化中使用此指针并且在层次结构中存在虚拟继承时,C++11内联对象初始化不起作用(在GCC中)。这可能是GCC的错误吗(因为它在CLang中工作)?还是C++11标准本身的差距?示例(可以在here中尝试),当使用GCC编译以下代码时:FieldIndexm_inB{"inB",this};不会被执行。但它会在使用CLang编译时执行。变通方法:从FieldIndexContainer派生A作为虚拟#include#include#includeusingnamespacestd;classFieldIndexContainer{public:classFieldIndex{pu

union 成员的 C++ 生命周期

在当前版本的C++标准草案中,[basic.life]/1状态:Thelifetimeofanobjectorreferenceisaruntimepropertyoftheobjectorreference.Avariableissaidtohavevacuousinitializationifitisdefault-initializedand,ifitisofclasstypeora(possiblymulti-dimensional)arraythereof,thatclasstypehasatrivialdefaultconstructor.Thelifetimeofanob

c++ - 在 C 中声明 == 在 C++ 中定义?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Whatisthedifferencebetweenadefinitionandadeclaration?在C中声明等于在C++中定义是否正确?inta;/*todeclarevariabelainC*/intb=2;/*todeclareandinitializeinC*/intc;//todefineinC++intd=4;//todefineandinitializeinC++

c++ - 下面的方案如何保证对象 cin、cout、...只有一个定义?

Here您会在Whichheader?下找到以下语句:Finally,providestheeightstandardglobalobjects(cin,cout,etc).Todothiscorrectly,thisheaderalsoprovidesthecontentsoftheandheaders,butnothingelse.Thecontentsofthisheaderlooklike#include#includenamespacestd{externistreamcin;externostreamcout;....//thisisexplainedbelowstatic

非本地静态对象在不同翻译单元中交互的 c++ 示例

我正在阅读ScottMeyer的EffectiveC++一书。在其中,他提到不同翻译单元中非局部静态对象的相对顺序是未定义的。为了证明,他举了下面的例子。在一个文件中,classFileSystem{public:std::size_tnumDisks()const;};externFileSystemtfs;在另一个文件中,classDirectory{public:Director(){std::size_tdisks=tfs.numDisks();}};DirectorytempDir();我理解如果初始化顺序不确定为什么这会很糟糕,因为tfs可能不会在tempDir调用其构造函

c++ - 奇怪的行为,用 int 初始化函数指针?

无意中,我发现这段代码可以在VS2012上编译。typedefvoid(*func)();funcf=func(12);f被初始化为一个整数12作为它的地址。据我所知,从整数转换为函数指针是有效的,如下所示:funcf=(func)12;虽然语句func(12)看起来更像是一个构造函数,所以我尝试了这个:funcf(12);编译失败。funcf=(func)12//ok,cast1funcf=func(12);//ok,what?2funcf(12);//failed3funcf=12;//failed4所以我的问题是:func(12)的真正底层语法是什么,是强制转换还是初始化?如何使

c++ - "static functions with block scope are illegal"错误取决于初始化样式?

我有一个类Library,其中包含一个结构Transaction,该结构有一个类型为Patron的成员变量。classPatron{public:Patron(){}};classLibrary{public:structTransaction{Patronp;Transaction(Patronpp):p(pp){}Transaction();};};对于Transaction的默认构造函数,我有一个函数default_transaction()返回对静态对象的const引用,正如Stroustrup在“编程-原则和实践”中所推荐的使用C++”(第324页);推理:避免在构造函数代码

C++成员初始化、复制初始化和默认初始化

摘自TheC++ProgrammingLanguage,第4版,“17.3.1没有构造函数的初始化”部分,第489页书中示例中标记的行无法编译并出现此错误-$g++-std=c++11ch17_pg489.cppch17_pg489.cpp:Infunction'intmain()':ch17_pg489.cpp:32:34:error:couldnotconvert's9'from'Work'to'std::string{akastd::basic_string}'Workcurrently_playing{s9};//copyinitialization我有Cygwin$g++--

c++ - 调用构造函数之前是否初始化了静态成员?

我有一个带有std::map静态成员的类。我在执行构造函数体之前在同一个翻译单元(同一个cpp文件)中初始化它。我的程序没有输出就失败了。我发现了称为静态初始化顺序失败的问题,但我认为情况并非如此。classTest{public:staticstd::mapa;Test(std::stringID){/*inmycompletecode(whereconstructor*implementationandmapinitialization*areinaseparateTest.cppfile),thisfails,maybe*becausethemapisnotinitialized

c++ - 使用指向自身的指针初始化成员变量

我听说以下是有效的并且未初始化x就好像它是intx;:intx=x;这个呢?这段代码是否等同于上面的:structFoo{Foo(intFoo::*p):x(this->*p){}intx;};intmain(){Foof(&Foo::x);}f.x是否仍未初始化?我有未定义的行为吗? 最佳答案 C++14清楚地表明使用indeterminatevalueisundefinedbehavior,来自8.5部分(强调我的):Ifnoinitializerisspecifiedforanobject,theobjectisdefault