草庐IT

弱引用

全部标签

c++ - 未定义对 'boost::system::generic_category()' 的引用?

看来我看不到明显的东西。我想为我的项目使用一些Boost库功能,并且知道我突然遇到了这些好错误:LinkingCXXexecutableATFORCMakeFiles/ATFOR.dir/stdafx.cc.o:Infunction__static_initialization_and_destruction_0(int,int)':stdafx.cc:(.text+0x3c):undefinedreferencetoboost::system::generic_category()'stdafx.cc:(.text+0x48):undefinedreferencetoboost::s

c++ - 强制允许取消引用 NULL 指针

我有一个非常古老(且庞大)的Win32项目,该项目通过将取消引用的指针强制转换为指针来使用NULL指针进行大量检查。像这样:int*x=NULL;//somewhere//...codeif(NULL==&(*(int*)x)//somewhereelsereturn;是的,我知道这段代码很愚蠢,需要重构。但由于代码量巨大,这是不可能的。现在我需要在Xcode的MacOSSierra下编译这个项目,这会导致大问题......事实证明,在Release模式下(通过代码优化)条件以不正确的行为执行(所谓的未定义行为,因为取消引用NULL指针)。根据thisdocumentforGCC有一个

c++ - 为什么我不能将 const 左值引用绑定(bind)到返回 T&& 的函数?

我将一个函数的一些返回值绑定(bind)到一个const左值引用,但是在const左值引用的生命周期结束之前,该对象被删除了。在下面的示例中,Foo对象在foo的生命周期结束之前被销毁:#include#includestructFoo{~Foo(){std::cout输出是:Foodestroyed:somestringbeforescopeend在coliru上直播:1我认为您可以将constT&绑定(bind)到任何东西。返回T&&是不好的做法吗?应该首选按值返回吗?我在这里的cpprestsdk中偶然发现了这个:inlineutility::string_t&&to_strin

c++ - 为什么可以从外部通过指针或引用访问静态本地对象?

您可能知道,局部静态变量不能通过名称在函数外部访问,但可以通过指针或引用访问。所以下面的代码是格式良好的。但是为什么?我知道这个事实是事实,但没有根据。其实我想要的是C++标准的相关摘录。我正在阅读它,但最终没有找到证据。谁能给我摘录或提示以找到它(因为仅在文档中搜索“静态”会导致超过一百次点击)?#includeusingnamespacestd;classTest{public:int*f(inti)const{staticintj;j+=i;cout"nowj=3"*p+=10;t.f(0);//=>"nowj=13"int&r=t.g(3);//=>"nowk=3"r+=10;

我如何获得对当前承诺的引用()

在下面的代码中,我想检查一下回调是否正在从最新列录中执行,所以我正在检查thisPromise看看它是否与latestRequest。明显地thisPromise不起作用。有没有办法获得当前的承诺?letlatestRequest=MyLib.retrieve(getFilteredQuery(filters,queries,user)).then(res=>{//Checkingwhetherthisisthelatestrequesthandlerif(latestRequest===thisPromise){updateData(res)}}).catch(err=>{console.e

c++ - 显式引用限定转换运算符模板的实际应用

给定以下转换运算符structA{templateexplicitoperatorT&&()&&;templateexplicitoperatorT&()&;templateexplicitoperatorconstT&()const&;};structB{};我希望以下转换都是有效的,但有些会给出编译错误(liveexample):Aa;A&&ar=std::move(a);A&al=a;constA&ac=a;B&&bm(std::move(a));//1.OKB&&bt(A{});//2.OKB&&br(ar);//3.error:noviableconversionfromAt

c++ - 是否有等效于 Clang/LLVM 的 .spec 文件,我在哪里可以找到引用?

可以使用.specs文件将gcc驱动程序配置为使用特定链接器、特定选项和其他详细信息(例如覆盖系统header)。GCC(4.9.0)版本的当前(截至撰写本文时)手册describestheSpecFileshere.Clang/LLVM有没有类似的机制。显然Clang有thenotionofadriver同样,但我无法提供任何关于Clang是否存在规范文件或类似机制以及如何使用它们的文档。我对C和C++都感兴趣,但可能指向它们中的任何一个的指针都会让我开始。目标是覆盖系统头文件和库路径以及之前简要提到的链接器。 最佳答案 根据th

c++ - 包装右值引用 lambda 时 std::async 和 std::bind 之间的区别

受此启发comment关于将带有右值引用参数的lambda直接绑定(bind)到std::async,通过std::async将右值绑定(bind)到lambda编译并按预期执行:(liveexample)autolambda=[](std::string&&message){std::cout但是,使用std::bind会触发编译器错误:(liveexample)autolambda=[](std::string&&message){std::cout这是因为std::bind将message保留为左值,因此当它传递给lambda时,参数不再与参数匹配。我已经readstd::asy

c++ - 通过不明确的转换运算符进行引用绑定(bind)

#includeusingnamespacestd;structCL2{CL2(){}CL2(constCL2&){}};CL2cl2;structCL1{CL1(){}operatorCL2&(){coutclang和gcc都给出了模糊的转换运算符,但VisualStudio编译正常并打印“operatorconstCL2&”。怎样才符合标准?据我所知,将CL1转换为constCL2&是在复制初始化上下文中(作为cl2对象直接初始化的一部分)。我看过n4296草稿,[over.match.copy]:Assumingthat“cv1T”isthetypeoftheobjectbein

c++ - 意外的 const 引用行为

#includeclassA{public:A(){cerr在GCC4.2中,我收到此消息:Infunction'intmain()':Line16:error:'B::B(constB&)'isprivatecompilationterminateddueto-Wfatal-errors.如果我从B中删除“private”,我会得到我期望的输出:AConstructorAConstructorBConstructorBDestructorADestructorADestructor我的问题是:为什么创建一个不称为private的方法会改变此代码是否编译?这是标准规定的吗?有解决方法吗