草庐IT

c++ - 跨 TU 的类模板重载

考虑以下C++11应用程序:A.cpp:templatestructShape{Tx;Tarea()const{returnx*x;}};inttestA(){returnShape{2}.area();}B.cpp:templatestructShape{Tx;Uy;Uarea()const{returnx*y;}};inttestB(){returnShape{3,4}.area();}main.cpp:inttestA();inttestB();intmain(){returntestA()+testB();}虽然它可以编译(只要A和B在不同的TU中),但它看起来不正确,我很难弄

c++ - 如何迭代重载 operator[] 的类?

这个问题在这里已经有了答案:WhatfunctionsmustIimplementtomakeaclassiterable?[duplicate](1个回答)Howtoallowrange-forlooponmyclass?[duplicate](3个答案)关闭4年前。我有这样一个类:classC{private:std::unordered_mapm={{'a',1},{'b',2},{'c',3}};public:intoperator[](constchar&key)const{returnm.find(key)->second;}};是否可以在不修改类的情况下迭代map的元素?

c++ - C++ 中的类 C 程序?

C++正确编程风格是否要求用类编写所有代码,或者是否允许类C程序?如果我给别人一些代码,它会被接受为C++只是因为它有std::vector和std::string(而不是char*)在里面,或者一切都必须是一个类?例如:intnumber=204;std::stringresult=my_procedure(number);ORMyClassmachine;std::stringresult=machine.get(number);在某些情况下,程序员是否必须或被允许在他的某些源代码中使用类似C的过程?你曾经不得不做这样的事情吗?在这个问题的上下文中,C和C++之间的差距在哪里(如果

c++ - 如何在必须复制构造的类中使用 std::auto_ptr?

我的foo类包含一个std::auto_ptr成员,我想复制它的构造,但这似乎是不允许的。作业也有类似的事情。请参阅以下示例:structfoo{private:int_a;std::string_b;std::auto_ptr_c;public:foo(constfoo&rhs):_a(rhs._a),_b(rhs._b),_c(rhs._c)//error:Cannotmutaterhs._ctogiveupownership-D'Oh!{}foo&operator=(constfoo&rhs){_a=rhs._a;_b=rhs._b;_c=rhs._c;//error:Samep

c++ - 转换为具有相同数据成员布局但实现不同的类是否安全?

第一个类将用于私有(private)继承,以确保完全相同的布局。这应该使类型转换安全。#include#includestructdata_base{data_base(inti,std::string&&s)noexcept:i_{i},s_{std::move(s)}{}inti_;std::strings_;};在这个简单的例子中,我打印了int数据成员首先是std::stringdata实例的数据成员.templatestructdata:privatedata_base//inherits{data(inti,std::string&&s)noexcept:data_base

c++ - 返回指针 vector 的类中的 const 方法

假设我有这个类:#includeusingnamespacestd;classBag{vectoritems;public:voidaddItem(int*i){items.push_back(i);}constvectorgetItems()const{returnitems;}};问题是我想防止更改参数项中指针指向的值。但是使用从getItems返回的vector我可以更改指向的值。现在,为了解决这个问题,我可以将参数项声明为vector但是我也无法更改类(class)中的值(value)观。有没有其他方法可以保护值但仍然不在项目声明中使用const?

c++ - 如果大括号闭合列表的类构造函数大小错误,则编译时错误

我正在尝试编写一个基于数学vector的类:templateclassVector{public:Vector()=default;Vector(std::initializer_listli){*this=li;}Vector&operator=(std::initializer_list);private:std::arrayx={}}templateinlineVector&Vector::operator=(std::initializer_listli){if(N!=li.size())throwstd::length_error("AttempttoinitialiseVe

c++ - 堆/堆栈上的类成员分配?

如果一个类声明如下:classMyClass{char*MyMember;MyClass(){MyMember=newchar[250];}~MyClass(){delete[]MyMember;}};也可以这样做:classMyClass{charMyMember[250];};一个类是如何在堆上分配的,就像我做MyClass*Mine=newMyClass();分配的内存是否也分配了第二个示例中的250个字节以及类实例化?该成员在MyClass对象的整个生命周期内是否有效?至于第一个例子,在堆上分配类成员是否可行? 最佳答案 是

c++ - 为什么我不能分配具有已删除或私有(private)析构函数的类的数组?

这个问题在这里已经有了答案:Dynamicallocationofclassarraywithprotecteddestructor(3个答案)Whatdestructorsarerunwhentheconstructorthrowsanexception?(3个答案)关闭5年前。我最近在工作中遇到了这个问题。我正在使用的库使用引用计数对象并实现了自己的处理方式。部分实现是库的每个类都有一个私有(private)析构函数。我猜这是为了防止在堆栈上创建对象,因为库会自动管理对象的生命周期(它是一个场景图)。无论如何,我想在堆上分配一个这样的类的数组,遇到了以下问题:#includeusi

c++ - C++中没有数据成员的类

这可能不是特定于C++的问题,而是与面向对象编程有关。我对此很陌生,我对我的设计表示怀疑。我有一个Parser类,它基本上实现了许多处理解析表达式、从中缀到后缀的转换等的函数。我在main函数中使用这些Parser函数。我意识到我不需要这个类的任何数据成员。因此,我真的不需要这个类的对象。因此,我最终将类中的每个函数都设为静态。这个设计有什么奇怪的地方吗?我应该把它作为一个接口(interface)吗?有什么建议吗? 最佳答案 您需要一个解析器,并且知道您希望它为您做什么-这实际上就是您的“界面”。解析器的当前实现不需要任何成员变量