草庐IT

C++ 相互递归变体类型

我正在尝试使用变体在C++中表示PDF对象类型。PDF对象是以下之一:BooleanIntegerRealStringNameStreamArrayMap如您所见,Object类型是相互递归的,因为Arraytype需要声明Map需要声明Array的类型类型。我怎么能在C++中表示这种类型呢?如果变体不是最好的方法,那什么才是?这是我到目前为止尝试过的方法,但由于std::unordered_map的要求,它无法编译。(我认为)http://coliru.stacked-crooked.com/a/699082582e73376e 最佳答案

c++ - 为什么 int 不能用作返回类型的左值,而用户定义的类可以?

structA{};Af1(){returnA();}intf2(){returnint();}intmain(){f1()=A();//OKf2()=int();//errorC2106:'=':leftoperandmustbel-value}为什么f1()=A();正常而f2()=int();失败? 最佳答案 f1()返回A的实例。由于您没有覆盖复制/移动赋值运算符,因此编译器会为您生成一个。您实际上是在调用成员函数:f1()=A();//callsA&operator=(A&&)第二个不起作用,因为int不是类类型。

c++ - 将结构视为数据类型是否准确?

根据我对数据类型的理解:计算机只能存储0和1,不能存储负数、实数、字符等。所以发明了数据类型来表示(编码)这些类型数据作为一组0和1,然后在需要时对其进行解码。但是结构呢:structStudent{intage;floatgpa;};Students1;s1.age=17;s1.gpa=3.42;Students2;s2.age=16;s2.gpa=3.64;这看起来像是一个工具,所以我不必写:intstudent1_age=17;floatstudent1_gpa=3.42;intstudent2_age=16;floatstudent2_gpa=3.64;那么将Student视为

c++ - 为什么运算符的操作数需要是同一类型?

如果我有这样的东西:inti=123;floatf=123.1;if(f>i){}else{}i将被提升为float并且比较将变为if(float>float)。我的问题是为什么首先需要将int变量提升为float,是因为计算机比较两个普通数字比尝试比较容易吗找出每个数字的位代表什么,然后进行比较? 最佳答案 因为“没有数字”。计算机不比较数字,也不处理数字。他们使用并比较位模式。位模式代表数字的事实是由于我们用来将数字表示为位模式的“编码”。一旦我们选择了一种编码,对数字的操作就变成了对位模式的操作。一旦我们选择了另一种编码,对数

c++ - 是否有 decltype 的快捷方式

在thisanswer我写了C++17代码:cout{});这收到了一些关于C++类型关联性质的负面评论,我很遗憾地说我同意:(decay_t{}是一种非常复杂的方法来获得:Zero-initializedtypeofanelementofnumbers是否可以保持与numbers类型的关联?'元素,而不是键入30个字符来获取它?编辑:我有很多答案都涉及accumulate的包装器或者从numbers[0]中提取类型.问题是它们要求读者导航到次要位置以阅读不比初始化代码复杂的解决方案decay_t{}.我们必须做更多事情的唯一原因:decltype(numbers[0])是因为arra

c++ - 如何将 "using"关键字用于可变参数模板

我有一个可变参数模板类,它可以在构造函数中使用任意数量的变量,还有一个std::tuple/std::pair。等等。我想将此包装器用于具有不同返回类型的函数。例如:classf1{usingoutput=double;outputoperator(){do_smth};}classf2{usingoutput=std::tuple;outputoperator(){do_smth};}templateclassOutputType{std::tuplem_val;public:OutputType(std::tuple&&val):m_val(val){};OutputType(Ty

c++ - 为具有特定成员变量值的类创建不同类型

给定一个类,该类具有一些定义类类型的枚举,如下例所示:classFruit{public:enumclassFruitType{AppleType=0,OrangeType=1,BananaType=2,};Fruit(FruitTypetype):type_(type){}FruitTypefruit_type()const{returntype_;}private:FruitTypetype_;};以及从它派生的共享相同枚举的类:classDriedFruit:publicFruit{public://SomeDriedspecificmethods.};是否有可能以某种方式为Fr

c++ - 为什么我不能将 && 添加到 Ret (Args...) &?

当我尝试像这样编写自己的decay_t时:#includetemplatestructauto_decay{autooperator()()noexcept{returnstd::declval();}};templateusingdecay_t=decltype((decl_as>())());并使用以下方法对其进行测试:#includeintmain(){static_assert(is_same,int(*)()>{}());}我遇到了以下错误:Infileincludedfromtest_decay.cc:1:Infileincludedfrom./../src/decay.h

c++ - 基本 C++ 程序中的数学错误

我正在使用一个基本的C++程序来确定矩形的面积和周长。我的程序适用于整数,但当我使用任何带小数的数字时就会崩溃。我的印象是我遗漏了一些东西,但由于我是一个完全的初学者,我不知道是什么。来源如下:#includeusingnamespacestd;intmain(){//Declaredvariablesintlength;//declaresvariableforlengthintwidth;//declaresvariableforwidthintarea;//declaresvariableforareaintperimeter;//declaresvariableforperim

this 的 C++ 类型

我正在用C++编写一些模板代码,我发现如果我可以确定this的类型,它会使代码更短/更好/更有用。我不想使用C++0x,因为代码要向后兼容旧的编译器。我也不想使用BOOST。我所拥有的是这样的:structMyLoop{templatevoidRun(intiterations,Contextc){MyUtility::templateWrapLoop(iterations,c);}};这可以用于一些有趣的循环优化。我不喜欢在MyUtility模板特化中使用MyLoop。使用C++0x,可以使用如下内容:structMyLoop{templatevoidRun(intiteration