草庐IT

Initialization

全部标签

带有 char 数组的 C++ 结构以不寻常的方式初始化为零

遇到一段不常见的c++初始化代码,似乎可以很好地处理以下...structsfoobar{charbar[10];charfoo[10];};...sfoobarx{0};这是将这些字符数组初始化为零的可接受方法吗? 最佳答案 这在C++中有效。作为效果sfoobarx{0};会将x.bar和x.foo的所有元素初始化为0.根据aggregateinitialization的规则,嵌套初始化列表的大括号可以省略,thebracesaroundthenestedinitializerlistsmaybeelided(omitted),

c++ - 从相同类型的静态成员进行类内初始化

下面的代码是否有效,例如不会带来未定义的行为?structS{inti=s.i;staticSs;};SS::s;intmain(){Sa;//a.i=0S::s.i=42;Sb;//b.i=42}据我所知,所有具有静态存储持续时间的变量都是零初始化的。因此s.i在S::s创建时是0,一切都很好。但也许我遗漏了什么。 最佳答案 我认为它定义明确。[class.static.data]/6Staticdatamembersareinitializedanddestroyedexactlylikenon-localvariables.[

c++ - 初始化类的私有(private)成员变量

我提前道歉,因为我的一些措辞可能不是100%正确。我要上这样一个类:classClassName{private:AnotherClassclass2;public:ClassName();~ClassName();...在这个类的构造函数中,除其他外,我放了一行ClassName::ClassName(){AnotherClassclass2;}这就是我认为您应该在C++中初始化对象的方式,但是我注意到(通过GDB)正在创建两个AnotherClass对象。一次在构造函数定义上,然后再次在我的初始化行上。这背后的原因是什么?如果我想使用一个更复杂的构造函数,比如AnotherClas

c++ - 如何实现方便的初始化?

例如#includeclassRange{public:Range(std::arrayends):m_ends(ends){}private:std::arraym_ends;};我可以Ranger({1,2});现在我有另一个类(class)classBox{public:Box(std::arrayranges):m_ranges(ranges){}private:std::arraym_ranges;};我希望我能做到以下几点Boxb({{1,2},{3,4},{5,6}});但我不能。我怎样才能更改代码以使其成为可能。 最佳答案

c++ - 为什么我不能像这样淡化 std::array?

这个问题在这里已经有了答案:C++11:Correctstd::arrayinitialization?(5个答案)关闭6年前。为什么我不能像这样淡化std::array?#includestructPoint{floatx;floaty;};intmain(){std::arraym_points{{1.0f,1.0f},{2.0f,2.0f},{3.0f,3.0f}};}这样做我得到错误:error:toomanyinitializersforstd::array但它是这样工作的:std::arraym_points{Point{1.0f,1.0f},Point{2.0f,2.0f

c++ - 如何就地初始化数组?

如何在不复制或移动构造临时元素的情况下初始化数组?当元素具有显式deleted复制或移动构造函数时,只有当元素具有默认构造函数或具有所有默认参数的构造函数时,我才能初始化数组,并且我执行以下操作之一:(a)明确声明数组,(b)直接初始化和零初始化数组,或(c)复制初始化和零初始化数组。直接(但不是零)初始化和复制(但不是零)初始化都不会编译。structFoo{Foo(intn=5):num(n){}Foo(constFoo&)=delete;//Foo(Foo&&)=delete;//ERRORFooa5[2]={5,5};//copyinitialization->ERROR}这3

c++ - 有没有一种方法可以初始化一个不涉及编写构造函数的新结构变量?

我想我依稀记得一个较新的c++标准(可能是它的c++11,或者可能是14?...17??)允许你初始化一个结构,你可以定义一个结构,然后无需编写构造函数即可对其进行初始化。例如:structtest{inta;intb;std::stringstr;};intmain(){std::maptest_map;test_map[0]=test(1,2,"test1");//Thisisthelineinquestion//Oritmightbemorelike:test_map[0]=test{1,2,"test1"};return0;}我不记得这个特殊初始化的名称(或者它是否存在)!。所

c++ - 用子类对象初始化的多态基类对象数组

抱歉,标题太复杂了。我有这样的东西:classBase{public:intSomeMember;Base():SomeMember(42){}virtualintGet(){returnSomeMember;}};classChildA:publicBase{public:virtualintGet(){returnSomeMember*2;}};classChildB:publicBase{public:virtualintGet(){returnSomeMember/2;}};classChildC:publicBase{public:virtualintGet(){return

c++ - 在 C++ 中使用隐式转换进行复制初始化

classFoo{public:Foo(floatb){}};classBar{public:Bar(Foofoo){}};intmain(intargc,char*argv[]){Barb1(3.0f);//accept,oneimplicitconvertionhappensthere.Barb2=3.0f;//error:noviableconversionfrom'float'to'Bar'return0;}为什么第二个表达式编译失败?我预计它会调用与第一个表达式相同的转换构造函数。 最佳答案 来自[dcl.init]:Ot

c++ - 静态数据成员作为 C++ 默认参数是否安全?

我需要担心staticinitializationorderfiasco吗?当使用静态数据成员作为默认参数值时?例如:classThing{staticdoubleconstdefault_blarg;//initializedinanotherfilevoidrun(doubleblarg=default_blarg);};我知道default_blarg将在链接时的大部分未指定点初始化,但我不确定run的默认参数何时初始化。如果它在default_blarg初始化之前的某个时刻,我可以使用什么方法安全地将默认值公开为类接口(interface)的一部分而不重复它?对静态数据成员使用