相关疑难解决方法(0)

什么是C++ 11中的lambda表达式?

什么是C++ 11中的lambda表达式?我什么时候用?他们解决了哪些问题在引入之前是不可能的?

一些示例和用例将是有用的.

c++ lambda c++-faq c++11

1408
推荐指数
7
解决办法
45万
查看次数

为什么C++回调C函数需要"extern C"?

我在Boost代码中找到了这样的例子.

namespace boost {
   namespace {
     extern "C" void *thread_proxy(void *f)
     {
       ....
     }

   } // anonymous
   void thread::thread_start(...)
   {
       ...
       pthread_create(something,0,&thread_proxy,something_else);
       ...
   }
} // boost
Run Code Online (Sandbox Code Playgroud)

你为什么真的需要这个extern "C"

很明显,该thread_proxy函数是私有内部的,我不认为它会被破坏为"thread_proxy",因为我实际上根本不需要它.

实际上,在我编写的所有代码中,我在许多平台上运行,我从未使用过,extern "C"而且这个代码与普通函数一样正常.

为什么要extern "C"添加?


我的问题是extern "C"函数污染了全局命名空间,并且它们实际上并没有像作者所期望的那样被隐藏.

这不是重复的! 我不是在谈论破坏和外部联系.在此代码中很明显,外部链接是不需要的!

答: C和C++函数的调用约定不一定相同,因此您需要使用C调用约定创建一个.参见C++标准的7.5(p4).

c c++ callback extern-c

17
推荐指数
3
解决办法
4361
查看次数

标签 统计

c++ ×2

c ×1

c++-faq ×1

c++11 ×1

callback ×1

extern-c ×1

lambda ×1