[英]Why can I not cast a lambda to void* then to a function pointer?
[英]Can a void pointer point to a lambda function?
將函數指針指定給void
指針,
double f_dummy(double x) { return x; }
...
void *pv = f_dummy; //compilation error
如本FAQ中所述,這是非法的。 然而,答案以聲明結束:
如果以上內容似乎適用於特定操作系統上特定版本的特定編譯器,請不要給我發電子郵件。 我不在乎。 這是非法的,期間。
編輯 :作為對他人的警告,我確實遇到了這種“ 似乎工作 ”的行為,通過涉及類模板的繼承案例。 沒有編譯器警告,沒有意外的運行時行為。
這讓我的OCD骨頭發癢,讓我想知道我一直在做什么,例如,
...
auto l_func = [](double x){ return f_dummy(x); };
void *pv = &l_func;
auto pl = static_cast<decltype(&l_func)>(pv);
cout << (*pl)(5.) << endl;
編譯和運行干凈( g++ -std=c++11 -Wall
),是真正合法的。 是嗎?
是的,這是合法的,因為:
void*
並再次返回; l_func
是一個對象(一個l_func
函數,具有未指定的類類型) - 這是lambda的實現方式,按標准授權。 您引用的FAQ文本是不相關的,因為它引用了函數的指針。 _yourUnspecifiedLambdaType::operator()
是等效的*函數,但是你在這里沒有做任何事情。
*嗯,它甚至不等同,因為它是會員功能!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.