草庐IT

no-operation

全部标签

c++ - 我可以在 gdb pretty-print 中直接调用程序的 `operator[]` 吗?

我正在尝试使用GDB的pretty-print工具来显示自定义C++矩阵类。类(class)非常标准,您可以在任何地方找到。它是一个由类型参数化的模板,可以使用mat[i][j]等C类型符号访问。这首先隐式返回另一个表示行或列的模板“Slice”类,[]运算符可以再次访问它以提取数据。该类本身使用普通C数组进行存储,但它在其上实现了一些技巧,例如预分配更大矩阵的选项、启用非零开始、使用步幅等。该类没有native打印接口(interface),我无法修改它,也无法轻松链接到我自己的代码。自定义功能使得在Python中重现直接数据访问代码变得很痛苦。但那有必要吗?一般来说:为什么pret

C++ - 我应该使 `operator+` 为常量吗?它会返回引用吗?

当一个类重载operator+时,是否应该声明为const,因为它不对对象做任何赋值?另外,我知道operator=和operator+=返回一个引用,因为进行了赋值。但是,operator+呢?当我实现它时,我应该复制当前对象,将给定对象添加到该对象,然后返回该值吗?这是我的:classPoint{public:intx,inty;Point&operator+=(constPoint&other){X+=other.x;Y+=other.y;return*this;}//Theaboveseemsprettystraightforwardtome,butwhataboutthis?

c++ - 将 operator new 和 operator delete 与自定义内存池/分配器一起使用

我正在研究一个内存池/内存分配器实现,我正在一个庄园中设置它,只有一个特殊的“客户端”对象类型可以从池中提取。客户端可以直接构建到池中,或者它可以使用池进行动态内存调用,或者理论上它可以同时进行。我希望能够以调用我的池“alloc()”和“free()”函数的方式重载operatornew和operatordelete,以便获取构建对象所需的内存。我遇到的主要问题之一是让我的运算符(operator)删除以便能够通过调用我编写的pool->free()函数来释放内存。我想出了一个hack,通过将池传递到构造函数并让析构函数执行释放工作来修复它。这一切都很好而且花花公子,直到有人需要从这

c++ - "No viable overloaded ' = ' "为什么?

我正在为我的一门类(class)做一个项目,我很确定我几乎完成了这个项目。基本上我必须输入2人的票,我必须找到最高价和最低价。我需要重载*和/运算符来解决该项目的问题。此外,根据老师的指示,friend声明对于该项目来说是必需的。现在,对于这个问题。我正在尝试将正确的票证变量(t1或t2)存储到t3中,以便我可以将其返回给主变量。当我使用“=”将t1设置为t3时,它说“没有可行的重载'='”。以下是我的代码:#includeusingnamespacestd;classticket{public:ticket();doubleinput();doubleoutput();friendt

c++ - 在 R 中使用 C++ 编译错误 : "RcppArmadillo.h: No such file or directory"

$exportPKG_CPPFLAGS=`Rscript-e'Rcpp:::CxxFlags()'`$exportPKG_LIBS=`Rscript-e'Rcpp:::LdFlags()'`$RCMDSHLIBmy.cppg++-I/usr/share/R/include-DNDEBUG-I/usr/local/lib/R/site-library/Rcpp/include-fpic-g-O2-fstack-protector--param=ssp-buffer-size=4-Wformat-Wformat-security-Werror=format-security-D_FORTI

c++ - 为什么我不能在 'std::deque' 上使用 operator< ?

在我的代码库上运行cppcheck并收到以下错误:Dangerousiteratorcomparisonusingoperator但是双端队列的迭代器是随机访问迭代器,随机访问迭代器支持不等式运算符。那么是什么给了?例子:#includeintmain(){std::dequed;std::deque::iteratordi1=d.begin();std::deque::iteratordi2=d.end();if(di1编辑:此错误已通过cppcheckticket#5926提交并修复. 最佳答案 这是cppcheck中的一个错误

c++ - 从 std::deque 线程安全地同时调用 emplace_back() 和 operator[]() 吗?

来自emplace_back()的文档摘录:IteratorvalidityAlliteratorsrelatedtothiscontainerareinvalidated,butpointersandreferencesremainvalid,referringtothesameelementstheywerereferringtobeforethecall.DataracesThecontainerismodified.Nocontainedelementsareaccessedbythecall:concurrentlyaccessingormodifyingthemissafe

c++ - 一个 const std::function 包装一个非常量 operator()/mutable lambda

考虑以下示例:#include#includestructA{inti;voidoperator()(){std::coutconst&fun){fun();}intmain(){conststd::functionf{A{}};test(f);test(f);}在这里,conststd::function能够调用非constoperator().输出:12如果我提供一个mutablelambda,也会发生同样的情况,例如test([x=0]()mutable{++x;});这怎么可能?conststd::function可以包装可变仿函数是否正常? 最佳答

Visual Studio 2022: fatal error C1083: 无法打开包括文件: “crtdbg.h”: No such file or directory

1、报错内容fatal errorC1083:无法打开包括文件:“crtdbg.h”:Nosuchfileordirectory出现这个的主要原因是安装WindowsSDK时版本出错,需要根据自己的windows版本选择安装对应版本的WindowsSDKVS2022包括的版本如下:Windows版本WindowsSDK版本Windows10版本1903Windows10SDK版本1903(10.0.18362.1)Windows10版本2004Windows10SDK版本2004(10.0.19041.0)Windows10版本21H2Windows10SDK版本2104(10.0.20348

C++ 设计 : cast from base to derived class with no extra data members

我编写了很多处理消息协议(protocol)的代码。消息协议(protocol)通常会有一个通用的消息帧,可以从串行端口或套接字反序列化;该帧包含消息类型,消息负载必须根据消息类型进行处理。通常我会编写一组多态类,其中包含访问器方法和一个引用消息框架的构造函数。我突然想到,我可以直接从消息帧派生访问器类,然后从消息帧重新解释_cast到适当的访问器类,而不是根据对消息帧的引用构造访问器类。这使代码更加简洁并节省了一些字节和处理器周期。请参阅下面的(极其人为和浓缩的)示例。显然,对于生产代码,这一切都需要适当封装,转换成为派生类的成员,更好地分离关注点,并添加一些验证。为了把一个简明的例