Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ lambda可以有extern吗;";联系?_C++_Lambda_C++11_Linkage - Fatal编程技术网

C++ lambda可以有extern吗;";联系?

C++ lambda可以有extern吗;";联系?,c++,lambda,c++11,linkage,C++,Lambda,C++11,Linkage,这似乎适用于我尝试过的平台: #include <iostream> // extern "C" linkage extern "C" void foo(void (*fn_ptr)(int)); namespace { struct bar { static void f(int); }; } int main() { // Usually works on most platforms, not guaranteed though: foo(bar:

这似乎适用于我尝试过的平台:

#include <iostream>

// extern "C" linkage
extern "C" void foo(void (*fn_ptr)(int));

namespace {
  struct bar {
    static void f(int);
  };
}

int main() {
  // Usually works on most platforms, not guaranteed though:
  foo(bar::f);

  // Probably equally bad or worse?
  foo([](int x) { std::cout << x << std::endl; });
}
#包括
//外部“C”链接
外部“C”void foo(void(*fn_ptr)(int));
名称空间{
结构条{
静态空隙f(int);
};
}
int main(){
//通常适用于大多数平台,但不保证:
foo(bar::f);
//可能同样糟糕还是更糟?

FO([IN] x):STD::CUT

不。lambdas是最终具有函数调用操作符的对象。一个无约束的lambda可以转换成一个适当类型的函数指针,但是函数指针将是一个C++函数,C++连接。(同意,看起来这是官方给出的立场“没有lambda捕获的lambda表达式的闭包类型具有一个公共的非虚拟非显式const转换函数,指向与闭包类型的函数调用运算符具有相同参数和返回类型的函数指针。此转换函数返回的值应为函数的地址“不提及链接,假设它是C++链接是安全的,因此它是一个独特的类型。USER 166390:因为它不被定义为C链接,其中C函数是必需的。你所拥有的已经是安全的。”“两个具有不同语言链接的函数类型是不同的类型,即使它们在其他方面是相同的。”是的,可能是重复的,这个重复也得到了我的投票