草庐IT

弱引用

全部标签

c++ - 回复:使用 boost::make_transform_iterator 进行引用访问

我正在尝试使用boost::make_transform_iterator为自定义类创建迭代器,该自定义类的数据保存在映射中,迭代器使用键vector来访问值。在我的问题中,map的值是容纳大量数据的容器。由于我无力复制数据,因此我想通过迭代器通过引用访问数据。但是,这样做时,数据已损坏,如我所附的简单示例的输出所示。据我所知,问题在于使用from_key仿函数(使用映射引用初始化)和boost::make_transform_iterator的语义。关于如何使用boost正确执行此操作的任何想法?谢谢,帕特里克#include#include#include#include#incl

c++ - 未定义的 namespace 引用 - gsoap 错误

我在ubuntu工作,c++代码。使用gsoap和wsdl2h-oheader.hhttp://link1http://link2我已经成功地创建了.h,.cpp和.xml文件。当我#includeproxy1.h和#includeproxy2.h和他们的nmsp文件我收到以下错误:redefinitionof"Namespacenamespaces[]',previouslydefineshere.如何解决这个错误?当我使用:stdsoap2-i-C-Iimportheader.h我不能为每个url指定不同的命名空间吗?我想提一下stdsoap.cpp在我编译代码时使用。在stdso

c++ - 存储非拥有引用的对象,在销毁引用之前必须通知该引用

我有一个遵循这种模式的类(class):classFoo{public://CreateaFoowhosevalueisabsoluteFoo(intx):other_(0),a_(x){}//CreateaFoowhosevalueisrelativetoanotherFooFoo(Foo*other,intdx):other_(other),a_(dx){}//Getthevaluedoublex()const{if(other_)returnother_->x()+a_;elsereturna_;}private:Foo*other_;inta_;};Foo对象都属于Bar:cl

c++ - 如果 Derived 不向 Base 添加新成员(并且是 POD),那么可以安全地完成什么样的指针转换和取消引用?

(这是关于未定义行为(UB)的另一个问题。如果这段代码在某些编译器上“有效”,那么这在UB领域就没有任何意义。这是可以理解的。但是我们到底在下面的哪一行跨入UB?)(关于SO已经有很多非常相似的问题,例如(1)但我很好奇在取消引用指针之前可以安全地使用指针做什么。)从一个非常简单的基类开始。没有virtual方法。无继承。(也许这可以扩展到任何POD?)structBase{intfirst;doublesecond;};然后是添加(非virtual)方法但不添加任何成员的简单扩展。没有virtual继承。structDerived:publicBase{intfoo(){return

c++ - 如何将 C++ 仿函数右值引用传递给 lambda 的捕获?

我有以下功能templatevoidf(Function&&g){h(...,[&g](){g();});}它是一个函数f接受一个函数、一个lambda或一个仿函数作为参数。在它内部调用函数h,我将lambda作为参数传递给它,调用g并通过捕获接收g。我应该在lambda的捕获字段中传递g还是&g?是否会用上面的代码复制仿函数? 最佳答案 如果您通过引用捕获g,即使用代码段中显示的语法&g,则不会执行任何复制。这是首选方式。只有在f完成后可能会调用lambda时才应该复制,这可能意味着g引用的对象被破坏。在这种情况下,转发可能会更便

c++ - 通过重新解释转换创建无效引用

我正在尝试确定以下代码是否调用了未定义的行为:#includeclassA;voidf(A&f){char*x=reinterpret_cast(&f);for(inti=0;i(newchar[5])f(*a);}我的理解是reinterpret_cast和char*是兼容的,因为标准允许使用char和unsignedchar别名指针(强调我的):Ifaprogramattemptstoaccessthestoredvalueofanobjectthroughanlvalueofotherthanoneofthefollowingtypesthebehaviorisundefined

c++ - lambda 的生命周期在 const lambda 中捕获引用

我有以下API:old_operation(stream,format,varArgs);我想写一个适配器来编写调用如下:stream为此,我使用了一个临时对象,它存储对varArgs的引用并重载operator申请old_operation()如下:templatedecltype(auto)storage(T&&...t){return[&](auto&&f)->decltype(auto){returnstd::forward(f)(t...);};}templateclassOperation{usingStorage=decltype(storage(std::declval

c++ - const 引用的地址可以与引用对象的地址不同吗?

我遇到了等同于以下代码的问题:constauto&const_reference=some_object;assert(&const_reference==&some_object);当我用g++-O3标志编译它时,它没有通过断言。当它在没有优化的情况下编译时,断言通过。据我所知,即使我的项目中有UB,也不应该出现这种情况。在任何情况下,是否存在这种引用行为?编辑:链接到实际代码:https://github.com/Gray0Ed/ggp_thesis/blob/67606021020546b315ad63b7fd5c2203f3e0086f/rule_engine/aligner.

c++ - 将转发引用传递给线程包装器类

我们先来看一下具体的功能:voidboo1(){std::cout我希望这些功能与一些“守卫”功能一起执行,该功能可以进行异常保护(下面的解释)。所以,我写了两个函数,一个是自由函数,另一个是成员函数:templatetypenamestd::enable_if::value,void>::typefoo(C&&c,Args&&...args){std::cout(args)...);}templatetypenamestd::enable_if::value,void>::typefoo(C&&c,T*o,Args&&...args){std::cout*c)(std::forwar

c++ - 如何有效地将左值或右值绑定(bind)到同一个引用?

假设您有一个C++函数,它使用了(常量)参数的更改版本。MyObjectalter_obj(MyObjectconst&obj);//Createsnew,alteredobjectvoidfunc(MyObjectconst&original){MyObjectconst&altered(alter_obj(original));//...}由于“最重要的常量”导致临时对象的生命周期延长,因此可以正常工作。如果alter_obj()满足返回值优化的要求,它也相当有效,因为RVO意味着不会不必要地复制值返回的更改对象。如果您根本不进行更改,它也会很有效:voidfunc(MyObjec