草庐IT

Initialization

全部标签

c++ - 我可以在类定义中放置 "non-static blocks"代码吗?

C++中有非静态block吗?如果不是,如何优雅地模拟?我想替换像这样的东西:-classC{public:voidini(){/*somecode*/}};classD{std::vectorregis;//willini();laterpublic:Cfield1;public:Cfield2;public:Cfield3;//wheneverIaddanewfield,Ihaveto...#1public:D(){regis.push_back(&field1);regis.push_back(&field2);regis.push_back(&field3);//#1...al

C++ vector 初始化

我一直在Code::Blocks和MingW编译器中使用以下带有值的vector初始化:vectorv0{1,2,3,4};之后,我不得不将代码移动到一个visualstudio项目(c++)并尝试构建。我收到以下错误:局部函数定义是非法的VisualStudio编译器不支持这种初始化?我需要如何更改代码以使其兼容?我想初始化vector并同时用值填充它,就像数组一样。 最佳答案 VisualC++尚不支持初始化列表。最接近这种语法的是使用一个数组来保存初始值设定项,然后使用范围构造函数:std::arrayv0_init={1,2

c++ - 为什么在函数体内定义的内置类型的未初始化对象具有未定义的值?

问题:为什么在函数体内定义的内置类型的未初始化对象有未定义的值,而定义的内置类型的对象外部都被初始化为0或''?举个例子:#includeusingstd::cout;usingstd::endl;intia[10];/*iahasglobalscope*/intmain(){intia2[10];/*ia2hasblockscope*/for(constauto&i:ia)cout 最佳答案 因为C++的一般规则之一是您不必为不使用的东西付费。初始化全局对象相对便宜,因为它只在程序启动时发生一次。初始化局部变量会增加每个函数调用的

c++ - 为什么我不应该在 header 中初始化静态变量?

这个问题在这里已经有了答案:HowtoinitializeprivatestaticmembersinC++?(18个答案)关闭8年前。那么,假设我有一个这样的标题:#ifndefBASECLASS_H#defineBASECLASS_HclassBaseClass{public:staticintgetX(){returnx;}private:staticintx;};intBaseClass::x=10;#endif我多次听说我不应该在header中初始化静态变量,而应该在cpp中初始化。但是因为有guard,所以应该只有一份BaseClass::x。所以我有点不明白为什么要放in

c++ - 构造函数初始化列表中的约束检查

这种情况与Howtomakeaconstraintontheparametersoftheconstructor有关,但略有不同。您想初始化一个不可默认构造的成员,但需要在构造它之前检查约束。示例:(请注意,这实际上只是一个示例。在这种特定情况下是否应该使用无符号整数是可以讨论的,但问题实际上是关于您想要checkin构造函数的一般情况)你有以下类(class):classBuffer{public:Buffer()=delete;Buffer(intsize)noexcept;};....classRenderTarget{public:....private:intwidth_,h

c++ - 多维 vector 初始化

我关注std::vector声明:std::vector>>m_input;我正在初始化它如下:m_input.resize(100);m_output.resize(100);for(inti=0;i如何通过成员初始化列表实现这一点? 最佳答案 std::vector有一个带有两个参数的构造函数,一些元素和一个初始值。在你的例子中,你想要初始化m_input100份std::vector>,所以它会是:m_input(100,X).现在,那个X依次是100的vectorstd::vector,它又包含一百个整数::m_input(

c++ - vector 初始化 vector

我很难全神贯注于如何初始化vector的vector。typedefvector>>>数据容器;我希望它符合level_1(2elements/vectors)level_2(7elements/vectors)level_3(480elements/vectors)level_4(31elementsoffloat)解决元素问题不是问题。这应该像这样简单dc[0][1][2][3];问题是我需要用文件中乱序的数据来填充它,这样连续的项目就需要像这样放置dc[0][3][230][22];dc[1][3][110][6];//...etc所以我需要事先初始化V的V。我是在把自己吓坏还是

gcc 4.8.1 : list-initialization for copy constructor doesn't work 中的 C++11

我鼓励这个问题:如果我有classA{public:};intmain(){Aa{};Ab{a};}gcc给出:moves.cc:Infunction‘intmain()’:moves.cc:15:7:error:toomanyinitializersfor‘A’Ab{a};但是当我使用Ab(a)而不是Ab{a}时,所有编译都正确。如果我声明默认构造函数,它也会编译。为什么会这样? 最佳答案 该类是一个聚合,因此列表初始化将执行聚合初始化,并且不会考虑隐式声明的构造函数。因为没有数据成员,所以只有空列表可以是有效的聚合初始化器。Bu

c++ - 如何使用 avr-gcc 在 C/C++ 中执行预主初始化?

为了确保一些初始化代码在main之前运行(使用Arduino/avr-gcc),我有如下代码:classInit{public:Init(){initialize();}};Initinit;理想情况下,我希望能够简单地编写:initialize();但这不能编译...有没有更简洁的方法来达到同样的效果?注意:代码是Arduino草图的一部分,因此main函数是自动生成的,不能修改(例如调用initialize在任何其他代码之前)。更新:理想情况下,初始化将在setup函数中执行,但在这种情况下,还有其他代码依赖于它发生在main. 最佳答案

c++ - 为什么在 C++ 中不允许初始化整数成员变量(不是 const static)?

当我尝试在类定义中初始化一个int成员变量时,我的C++编译器报错。它告诉“只能在类中初始化静态常量整数数据成员”。您能否解释此限制背后的基本原理(如果可能,举例说明)。 最佳答案 因为目前的标准是不允许的。AccordingtoBjarne,您将能够在C++0x中执行此操作。如果您确实需要它,请尝试将编译器设置为C++0x(GCC中的-std=c++0x)并查看您的编译器是否支持它。 关于c++-为什么在C++中不允许初始化整数成员变量(不是conststatic)?,我们在Stack