草庐IT

Initialization

全部标签

c++ - 为什么 c++ 编译器接受这个初始化?静态整数 x = x;

我刚知道这个:staticintx=x;为什么C++编译器接受这个初始化?我会称之为编译器异常,但有人可能会对此给出一个很好的解释。因此,对于具有静态存储的数据,可以使用自身初始化变量...我已经使用VS2015和VS2017编译器以及其他一些在线C++编译器进行了尝试。 最佳答案 static和非static变量其实是一样的。名称在其声明符之后和初始化之前(如果有的话)立即变得可见。因此在staticintx=x;名称x在第一次出现后立即可见,并且可以在初始化程序中引用。因为它是静态的,所以它的初始值是明确定义的(它是0)。这也是

c++ - 不可复制类型的复制列表初始化

12.6.1-显式初始化structcomplex{complex();complex(double);complex(double,double);};complexsqrt(complex,complex);complexg={1,2};//constructcomplex(1,2)//usingcomplex(double,double)//and*copy/move*itintog8.5初始化器14-TheinitializationthatoccursintheformTx=a;aswellasinargumentpassing,functionreturn,throwing

c++ - 静态 C++ 映射初始化错误 C2552 : non-aggregates cannot be initialized with initializer list

我正在尝试使用以下代码在header中初始化map,但它一直在标题中显示错误。我正在使用C++11,所以这应该是可能的,对吧?typedefstd::map>AnimationSpeedMap;AnimationSpeedMapAnimationSpeeds={{NPCAnimation::WALK,{{Direction::LEFT,sf::milliseconds(100)},{Direction::RIGHT,sf::milliseconds(100)},{Direction::UP,sf::milliseconds(200)},{Direction::DOWN,sf::mill

c++ - 如何在 C++ 中初始化嵌套结构?

我在程序中创建了几个不同的结构。我现在有一个带有嵌套结构的结构,但是我不知道如何正确初始化它们。结构如下所示。/***POINTSTRUCTURE***/structPoint{floatx;//xcoordofpointfloaty;//ycoordofpoint};/***BoundingBoxSTRUCTURE***/structBoundingBox{Pointymax,ymin,xmax,xmin;};/***PLAYERSTRUCTURE***/structPlayer{vectorx;//playersxcoordsvectory;//playersycoordsBoun

c++ - constexpr 和初始化

也许已经有人问过类似的问题,当然,这是一个吹毛求疵...我有一堆常量std::map用于在enum(class)值和它们的std::string表示之间切换(双向)。这里有人向我指出,这些映射将在运行时初始化,当其他初始化代码运行时,在我的程序执行所有好东西之前。这意味着常量表达式会影响运行时性能,因为映射是根据它们的枚举字符串对构建的。作为说明性示例,这里是其中一张map的示例:enumclassos{Windows,Linux,MacOSX};constmapos_map={{"windows",os::Windows},{"linux",os::Linux},{"mac",os:

c++ - 正在初始化.. 哪个更有效率?

我有以下问题。应遵循其中哪一项更好,为什么?stringstrMyString="SampleString";或stringstrMyString("SampleString");提前致谢。 最佳答案 我回答了here我在这个答案中加入的一件事是:两者都没有使用任何赋值运算符。不过,对字符串特定内容的简短说明。std::string有一个构造函数接受一个参数,该参数接受charconst*://simplifiedtoanormalclassdeclaration.std::stringactually//isatemplatein

c++ - 为什么编译器不能像在变量声明中那样在结构成员中设置 char[] = { .. } 的大小?

这个问题在这里已经有了答案:Whatisthereasonfornotbeingabletodeducearraysizefrominitializer-stringinmembervariable?(3个答案)关闭5年前。我在结构中使用带有初始化值的struct,如下例所示。我不明白的是为什么编译器不能像在变量声明中那样在结构成员中设置char[]={..}的大小?Clang++给出以下错误:error:arrayboundcannotbededucedfromanin-classinitializer代码:structA{chars[]={'F','O','O',...};};

c++ - 静态变量被初始化两次

假设我在一个编译单元中有一个静态变量,它最终出现在一个static库libA中。然后我有另一个编译单元访问这个变量,它最终在一个shared库libB.so中(所以libA必须链接到libB)。最后我有一个主函数也直接从A访问静态变量and依赖于libB(所以我链接到libAandlibB)。然后我观察到,静态变量被初始化了两次,即它的构造函数运行了两次!这似乎不对。链接器不应该将两个变量识别为相同的变量并将它们作为一个变量进行优化吗?为了让我的困惑更加完美,我看到它使用相同的地址运行了两次!所以也许链接器确实识别了它,但没有删除static_initialization_and_de

c++ - 编译后确定静态初始化顺序?

在C++中,我知道编译器可以选择以它选择的任何顺序初始化静态对象(受一些约束),并且通常您无法选择或确定静态初始化顺序。但是,一旦程序被编译,编译器必须决定以什么顺序初始化这些对象。有什么方法可以从带有调试符号的已编译程序中确定以什么顺序会调用静态构造函数吗?上下文是这样的:我有一个相当大的程序,当它在新工具链下构建时,它在main()之前突然出现段错误。这是一个静态初始化顺序问题,或者它正在加载的库之一有问题。但是,当我使用gdb进行调试时,崩溃位置只是报告为原始地址,没有任何符号信息或回溯。我想通过在第一个静态初始化对象的构造函数处放置一个断点来确定这两个问题中的哪一个,但我不知道

c++ - C++11 中的数组声明和初始化

这里有8种在C++11中声明和初始化数组的方法,在g++下看起来没问题:/*0*/std::arrayarr0({1,2,3});/*1*/std::arrayarr1({{1,2,3}});/*2*/std::arrayarr2{1,2,3};/*3*/std::arrayarr3{{1,2,3}};/*4*/std::arrayarr4={1,2,3};/*5*/std::arrayarr5={{1,2,3}};/*6*/std::arrayarr6=std::array({1,2,3});/*7*/std::arrayarr7=std::array({{1,2,3}});根据严格