草庐IT

Initialization

全部标签

c++ - 为什么在新建数组时不能指定构造函数?

更新:上面的链接和下面的答案没有回答为什么此功能未标准化。这正是让我好奇的原因。请考虑std::vectorarr(8,7);之间的性能问题和newA[8](7);:如果我们使用std::vectorarr(8,7);它可以(不一定)按如下方式实现:this->internal_buf=newA[8];//CalldefaultconstructorA()8times!for(autoi=0;iinternal_buf[i]=A(7);//CallconstructorA(7)8timesAGAIN!!!}如果C++支持newA[8](7);可以按如下方式实现:A*arr=(A*)ma

C++11:赋值运算符是否会阻止类型被 POD,从而被全局初始化?

背景:我在一个大型代码环境中,其中运行全局构造函数的未定义顺序存在问题。所以我有一个自定义类,旨在延迟初始化直到首次使用。它所有的魔力都发生在它的operator*和operator->函数中;它们是唯一定义的东西。它还在自身内部存储一些状态,以供自动初始化功能使用。当然,那个状态必须是POD,这样整个类都是POD,这样它就可以在任何人的代码开始运行之前就完全设置好,这样所有的代码都可以在任何地方使用所有的全局变量,而不用担心全局变量没有'尚未设置。前段时间有人添加了一个私有(private)的、从未定义的赋值运算符,这样该类型就永远不会被分配给(无论如何它都不会被设计成永远改变)。现

c++ - c++中字符串的这两种不同的初始化有什么区别?

源代码#include#includeusingnamespacestd;intmain(){std::strings{'a','b','\0','c'};std::strings1="ab\0c";cout输出是4abc2ab我想知道为什么会出现这种现象,这两种初始化在C++中有什么区别吗?谢谢。 最佳答案 对于s,您正在匹配接受字符初始化列表的构造函数:列表中的(9)here.string类允许您从任意数据构造字符串,其中可能包含嵌入的NUL,正如本例中所做的那样。初始化列表知道自己的长度,因此string捕获所有字符。对于s1

c++ - 类数据默认初始化

我有以下代码:#includeusingnamespacestd;classBase{private:inti;charch;public:voidshowdata(){cout这个程序可以正常编译和运行。输出显示i初始化为0,ch初始化为'\0'。如果您注意到我在这个程序中注释掉了2个语句。首先是公共(public)数据pub_data的声明,其次是main打印此公共(public)数据的行。现在的问题是,如果我取消注释这两行,类的数据成员即i、ch、pub_data似乎没有被初始化,并且在打印时,它们显示垃圾值。所以我的问题是公共(public)数据在这里有什么不同?我正在使用g+

C++ 禁止自动初始化和销毁

如何抑制类型的自动初始化和销毁​​?Tbuffer[100]自动初始化buffer的所有元素,并在它们超出范围时销毁它们,这很棒,但这不是我想要的行为。#includestaticintcreated=0,destroyed=0;structS{S(){++created;}~S(){++destroyed;}};templateclassfixed_vector{private:Tm_buffer[KCount];public:fixed_vector(){//somewaytosuppresstheautomaticinitializationofm_buffer}~fixed_v

c++ - C++中的二维 bool 数组初始化

我不太使用C,最近我对二维数组初始化问题感到困惑。我需要调试某人的代码并卡在以下(她的原始代码)中:constintlocation_num=10000;bool**location_matrix;if(node_locations){location_matrix=(bool**)malloc(location_num*sizeof(bool*));if(!location_matrix){cout我认为这是多余的,所以我将其更改为以下内容:location_matrix[location_num][location_num]={{false}};但是,段错误会在运行时发生。我的问题

c++ - 如何防止默认初始化具有类类型的 const 变量

我有一个自定义类,我希望它的行为像一个内置类型。但是我注意到您可以在不提供初始值的情况下初始化该类的常量变量。我的类当前有一个空的默认构造函数。这是int和我的类foo的比较:inta;//Validinta=1;//Validconstinta=1;//Validconstinta;//Errorfooa;//Validfooa=1;//Validconstfooa=1;//Validconstfooa;//Shouldcauseanerror,butitcompiles如你所见,我需要阻止constfooa;来自编译。C++专家有什么想法吗? 最佳答案

c++ - 正确初始化智能指针数组

对于这种情况:classA{//implementation};classB{public:B();~B();private:std::vector>_innerArray;};我应该在B()中做什么来创建一个具有有效状态的对象?我是否需要为数组中的每个A对象手动调用默认构造函数?我是否需要在~B()中做一些特别的事情?如果B类是糟糕设计的例子,请随意说出如何让它变得更好。谢谢。编辑所以,这是我真正需要的方案。因此,仅存储在A数组中的真实值和所有其他对象都用于存储连接。最简单的示例-A=点,B=通过选定点的线(或曲线),C=由线描述的平面。希望它能使问题更准确。

c++ - 如何初始化 std::array<std::array<T, 2>, 2> 的对象?

我正在尝试初始化thing类型的对象:templatestructthing:std::array,2>{};thingt1{{{1,2},{3,4}}};我得到:error:nomatchingfunctionforcallto‘thing::thing()’thingt1{{{1,2},{3,4}}};同上thingt0{{1,2,3,4}};还有其他一些东西。 最佳答案 如果您使用的是C++17编译器,您只是少了一组额外的大括号。以下compiles:thingt1{{{{1,2},{3,4}}}};//||||-braces

c++ - 有什么方法可以初始化 unique_ptr 的 vector 吗?

例如structA{vector>m_vector{make_unique(1),make_unique(2)};};我尝试了以上但失败了。有什么方法可以初始化unique_ptr的vector? 最佳答案 您不能从初始化列表中移动,因为元素是const.§8.5.4[dcl.init.list]/p5:Anobjectoftypestd::initializer_listisconstructedfromaninitializerlistasiftheimplementationallocatedanarrayofNelement