我想使用第三方函数,它通过充满函数指针的结构提供其API。例如:structS{usingp_func1=int(*)(int,int);p_func1func1;usingp_func2=int(*)(char*);p_func2func2;}第三方库初始化这个结构。需要检查这些函数(func1、func2)的返回值,我希望我能以某种方式显示在[[discard]]属性上以确保检查返回值。有没有办法做到这一点,同时保持结构的ABI?编辑:到目前为止,我能想到的最好的办法就是拥有另一个结构,如下所示:structS_wrap{Sorig;[[nodiscard]]intfunc1(in
应用于函数时,[[nodiscard]]属性鼓励编译器在被丢弃的表达式中使用而不是强制转换为void时发出警告。示例:[[nodiscard]]intcallable_return_not_discardable(intn){returnn;}intmain(){callable_return_not_discardable(0);//warning/error://ignoringreturnvalueof'intcallable_return_not_discardable(int)',//declaredwithattributenodiscard[-Wunused-result
版本:UE4.27.2VS2022解决方案:使用警告杂注 #pragmawarning(disable:4834) 关闭文件中的警告。找到报错文件位置,在报错文件代码头写入#pragmawarning(disable:4834)|
说我有[[nodiscard]]intfoo(){return0;}intmain(){foo();}然后error:ignoringreturnvalueof‘intfoo()’,declaredwithattributenodiscard[-Werror=unused-result]但是如果intx=foo();然后error:unusedvariable‘x’[-Werror=unused-variable]有没有一种简洁的方式告诉编译器“我想丢弃这个[[nodiscard]]值”? 最佳答案 Castittovoid:[[n
说我有[[nodiscard]]intfoo(){return0;}intmain(){foo();}然后error:ignoringreturnvalueof‘intfoo()’,declaredwithattributenodiscard[-Werror=unused-result]但是如果intx=foo();然后error:unusedvariable‘x’[-Werror=unused-variable]有没有一种简洁的方式告诉编译器“我想丢弃这个[[nodiscard]]值”? 最佳答案 Castittovoid:[[n
看看这个片段:struct[[nodiscard]]Result{};structDiscardableResult:Result{};DiscardableResult是否有[[nodiscard]]属性?如果是,是否有可能以某种方式将其删除? 最佳答案 [dcl.attr.nodiscard]/2说:Anodiscardcallisafunctioncallexpressionthatcallsafunctionpreviouslydeclarednodiscard,orwhosereturntypeisapossiblycv-
看看这个片段:struct[[nodiscard]]Result{};structDiscardableResult:Result{};DiscardableResult是否有[[nodiscard]]属性?如果是,是否有可能以某种方式将其删除? 最佳答案 [dcl.attr.nodiscard]/2说:Anodiscardcallisafunctioncallexpressionthatcallsafunctionpreviouslydeclarednodiscard,orwhosereturntypeisapossiblycv-
我有一个函数对象,它是另一个函数的包装器:templateclassWrapper{private:FuncTfuncToWrap;public:Wrapper(FuncTftw):funcToWrap(ftw){};templatetypenamestd::result_of::typeoperator()(ARG&&...args){returnfuncToWrap(std::forward(args)...);}};intmain(){std::functiontestfunc=[](){std::couttest{testfunc};test();}我想做的是标记operato
我需要非C++17代码库中[[nodiscard]]属性的语义。我想在C++17之前有依赖于编译器的方法可以实现这一点。有谁知道这些?我对clang、gcc和MSVC感兴趣。 最佳答案 GCC/Clang:__attribute__((warn_unused_result))MSVC:_Check_return__MSC_VER>=1700(VisualStudio2012) 关于c++-在C++17之前指定[[nodiscard]]的方法,我们在StackOverflow上找到一个类似
我想防止人们在不处理返回值的情况下调用lambda。Clang4.0拒绝我尝试过的一切,使用-std=c++1z进行编译:autox=[&][[nodiscard]](){return1;};//error:nodiscardattributecannotbeappliedtotypesautox=[[nodiscard]][&](){return1;};//error:expectedvariablenameor'this'inlambdacapturelistautox[[nodiscard]]=[&](){return1;};//warning:nodiscardattribut