草庐IT

MYLIB_FUNCTION_ATTRIBUTE

全部标签

c++ - std::is_member_function_pointer 不适用于 noexcept 成员函数

我在使用std::is_member_function_pointer时遇到问题。据我所知,在给定noexcept成员函数时它不起作用。我在标准中找不到任何声明它不适用于noexcept合格成员函数的内容。问题示例:#includeclassA{public:voidmember()noexcept{}};intmain(){//failsatcompiletimeifA::memberisadatamemberandnotafunctionstatic_assert(std::is_member_function_pointer::value,"A::memberisnotamemb

c++ - 为什么 std::function 可以用具有不同返回类型的 lambda 构造?

以下compilesfine:#includeintmain(){std::functionf=[]()->int{return1;};constint&r=f();//risadanglingreferencereturn0;}为什么可以将返回类型为constint&的std::function设置为返回类型为int的lambda?恕我直言,允许这种类型的转换在没有警告的情况下隐式发生是一个陷阱。 最佳答案 您可以使用任何可使用相关参数调用且其返回值可隐式转换为std::function返回值的对象构造一个std::functio

c++ - __PRETTY_FUNCTION__ 在常量表达式中

请引用这段代码:#include#includeconstexprstd::size_tstrlen(charconst*s){std::size_tn=0;while(*s++!='\0')++n;returnn;}templatestructX{};intmain(){constexprautopf=__PRETTY_FUNCTION__;//gccok;clangok;(1)static_assert(std::string_view(__PRETTY_FUNCTION__)==std::string_view("intmain()"));//gccok;clangok;(2)X

c++ - alignas 说明符 vs __attribute__(aligned),c++11

我目前正在使用C++11开发操作系统内核,我遇到了一个问题,我似乎无法找到自己的答案。目前我正在对齐我的分页结构,使用编译器特定的属性(例如gcc的__attribute__(aligned)),但是我想改用C++11alignas说明符,在Clang++这不是问题,因为它很乐意接受4096对齐作为alignas的参数,但是G++不接受!所以首先,alignasspecifier和gcc__attribute__(aligned)之间的主要区别是什么,显然两者都确保与特定值对齐,但是gcc中的alignas说明符似乎有128的限制,而属性似乎几乎没有限制,这是为什么?另外,为什么不能将

c++ - 优化的 argmin : an effective way to find an item minimizing a function

假设我有一个项目集合和对它们的评分函数:structItem{/*somedata*/};std::vectoritems;doublescore(Item);我想从该集合中找到分数最低的项目。一个简单的写法是:constautoargmin=std::min_element(begin(items),end(items),[](Itema,Itemb){returnscore(a)但如果score是一个计算量很大的函数,std::min_element的事实实际上在某些项目上多次调用它可能令人担忧。这是预料之中的,因为编译器无法猜测score是purefunction.我如何找到ar

c++ - 使用 std::function 和 std::bind 来存储回调和处理对象删除。

我想实现一个管理器,它使用C++11存储对多态类成员函数的回调。问题是我不确定如何处理成员所属的对象被删除或应该被删除的情况,我希望使界面尽可能简单。所以我想到了以下内容:将std::weak_ptr存储到对象,将std::function存储到成员。以下似乎有效:classMyBase{public:MyBase(){}virtual~MyBase(){}};//--------------------------------------------------classMyClass:publicMyBase{public:MyClass():MyBase(){}voidmyDou

c++ - 禁用 "bad function cast"警告

我收到以下警告:warning:convertingfrom'void(MyClass::*)(byte)'to'void(*)(byte)'这是因为我需要将成员函数而不是普通函数作为参数传递。但是程序运行正常。我想禁用此警告(Wno-bad-function-cast不适用于C++)或实现一种不同的方式来传递成员函数。 最佳答案 否。请认真对待此警告。您应该更改代码来处理这种情况。指向成员函数的指针(void(MyClass::*)(byte))和普通函数指针(void(*)(byte))是完全不同的。Seethislink.你不

c++ - 是否有 C++11/14 替代 __attribute__((packed))

C++11引入了标准化属性语法的概念。我找不到所有受支持属性的列表。是否有C++11属性替代__attribute__((packed))?例如struct__attribute__((packed))Pack{uint8_tfield1;uint8_tfield2;}; 最佳答案 不幸的是,没有。标准当前定义的属性是:[[noreturn]];[[carries_dependency]];[[deprecated]]/[[deprecated(reason)]];其他一切都是实现定义的。

c++ - 如何 : c++ Function Pointer with default values

我有:typedefvoid(*RespExtractor)(constcv::Mat&image,cv::Mat&resp);virtualvoidpredict_image(constcv::Mat&src,cv::Mat&img_detect,cv::Sizepatch_size,RespExtractor);voidcreate_hough_features(constcv::Mat&image,cv::Mat&resp,FeatureParams¶ms=FeatureParams());我将如何定义RespExtractor以接受具有默认参数的函数,这样我可以调用:p

c++ - 错误 C2280 : attempting to reference a deleted function

我是游戏开发的新手,也是C++的新手,但我已经开始开发一款打砖block小游戏。我以前让它运行过,但在重构(引入ArkanoidGame类)后它无法编译,我也不知道为什么。我得到的错误是:d:\dropbox\development\gamedev\c++\arkanoid\arkanoid\main.cpp(14):errorC2280:'ArkanoidGame::ArkanoidGame(void)':attemptingtoreferenceadeletedfunctiond:\dropbox\development\gamedev\c++\arkanoid\arkanoid\