草庐IT

default-initialization

全部标签

C++ 构造函数 : Initialize local variable before initializer list

如何在构造函数中(在堆栈上)存储初始化列表所需的临时状态?例如,实现这个构造函数……//configabstraction.h#includeclassConfigAbstraction{public:ConfigAbstraction(std::istream&input);private:intm_x;intm_y;intm_z;};...使用这样的有状态助手类?//mysillyparserdontworry.h#include//jsoncppclassMySillyParserDontWorry{public:MySillyParserDontWorry(std::istre

C++ "No appropriate default constructor available"

我想在不使用STL的情况下创建一个数组链表。但是,我在将数组传递到我的链接列表时遇到困难...编译时出现上面列出的错误。我需要如何将数组传递给链表?谢谢!(有问题的代码有**标记,如果测试请去掉)单链表.h#pragmaonce#ifndefSinglyLinkedList_h#defineSinglyLinkedList_h#includetemplatestructnode{Typevalue;node*next;};templateclassSinglyLinkedList{private:node*head;public:SinglyLinkedList();~SinglyLi

c++ - initializer_list 结合其他参数

假设我有一个类,它在构造函数中采用T类型的参数和U类型的参数集合。以下解决方案有效:structQ{Q(Tt,std::initializer_listus);};创建此类的实例将是:Qq{t1,{u1,u2,u3,u4}};但这对我来说看起来有点不干净。有比这个更好的解决方案吗? 最佳答案 您需要的是可变参数模板(c++11特性)。#includestructT{};structU{};classQ{public:templateQ(Tt,ArgTypes...args):Q(t,{args...}){}private:Q(Tt,

c++ - "except that a default constructed array is not empty"是什么意思?

在N3337中,我正在阅读§23.3.2.1/3,它指出:Anarraysatisfiesalloftherequirementsofacontainerandofareversiblecontainer(23.2),exceptthatadefaultconstructedarrayobjectisnotemptyandthatswapdoesnothaveconstantcomplexity.在§23.2.1,表96容器要求中,它显示了一个默认构造的对象Xu;,其中后置条件是u.empty()。据推测,以下内容:std::arraya;应该导致a.empty()输出1,它确实如此。

c++ - 类 std::array of objects without default constructors

所以让我们假设我有以下类(class)classNoDefaultConstructor{NoDefaultConstructor()=delete;...};我还有另一个类,它有一个类型为NoDefaultConstructor和其他成员的数组classWrapper{std::arrayarr;...};如何在Wrapper的构造函数中初始化数组(可能在使用std::intializer_list的初始化列表中)?更具体地说,是我可以将参数传递给Wrapper的初始化列表中的数组构造函数以具有类似于以下的构造的唯一方法吗?我正在考虑这样做,因为将来数组的大小可能会发生变化。temp

c++ - 错误 C4430 缺少类型说明符 - 假定为 int。注意 : C++ does not support default-intGenerator

我对以下代码有疑问:生成器.h:#pragmaonceclassGenerator{public:friendclassBagObject;Generator(void);~Generator(void);...voidgenerator(int);private:BagObject*object;vectordata;//Errorc4430};这是一个错误:errorC4430:missingtypespecifier-intassumed.Note:C++doesnotsupportdefault-int还有6个错误,但我相信在解决这个问题后它们应该会消失。这是cpp文件。第一次

c++ - 术语的含义 - Resource Acquisition Is Initialization

我知道RAII的作用。当/如果代码抛出异常时,这都是为了防止内存泄漏等。现在,我想了解那个智能术语的含义。http://en.wikipedia.org/wiki/AcquisitionAcquisition意味着获得某物。那么,当我们说资源获取就是初始化时,这是什么意思?我只是在这里谈论这个术语的含义,而不是一般的概念。 最佳答案 之前有人说过(可能是ScottMeyers说的,我记不清了),RAII应该被称为“Destructionisresourcerelease”,或者类似的词。“资源获取即初始化”字面上的意思是,当一个对象

c++ - "crosses initialization of variable"仅当初始化结合声明时

我读过thisquestion关于“跳转到案例标签”错误,但我还有一些疑问。我在Ubuntu12.04上使用g++4.7。这段代码报错:intmain(){intfoo=1;switch(foo){case1:inti=0;i++;break;case2:i++;break;}}错误是jump-to-case-label.cpp:Infunction‘intmain()’:jump-to-case-label.cpp:8:8:error:jumptocaselabel[-fpermissive]jump-to-case-label.cpp:5:9:error:crossesinitia

c++ - 嵌套的 std::initializer_lists 的数据元素是否保证是连续的?

可以通过嵌套大括号括起来的列表来创建多维初始化器,如{{1,2,3},{4,5,6}}中所示。接受它的函数可以使用嵌套的std::initializer_list编写。是否保证数据元素是连续的?这是一个例子:voidf(std::initializer_list>a){for(autoconst&p:a)for(autoconst&q:p)std::cout上面的代码在我的机器上输出了连续的地址。0x400c600x400c640x400c680x400c6c0x400c700x400c74有保证吗?更新答案一定是否定的。voidg(std::initializer_lista,std

c++ - 为什么将类特殊函数显式声明为 "default"

这个问题在这里已经有了答案:Whatdoes"default"meanafteraclass'functiondeclaration?(5个答案)关闭5年前。显式声明类特殊函数默认值有什么区别。classMyclass{public:Myclass()=default;virtual~Myclass()=default;Myclass(MyClass&&)=default;Myclass&operator=(MyClass&&)=default;Myclass(constMyClass&)=default;Myclass&operator=(constMyClass&)=default