游戏开发之extern “C”、内存申请及匿名函数(lambda)(C++基础)

一、extern “C”

语法:extern “C” [函数导出约定] [其余描述] 返回值数据类型 函数名();

  • 在函数前面添加,将C++风格的函数,编译为C风格。注意:若有函数重载就会无效。
  • _declspec(dllexport) 的作用是导出函数给其他库使用(仅在windows生效)。
extern "C" {_declspec(dllexport) void func1() { std::cout << "He12312312" << std::endl; }
}extern "C"  void func10(){}
extern "C" _declspec(dllexport) void func11();
void func11()
{}

二、与C相比内存申请方式不同

  • 在C中使用malloc free 申请和释放内存。
  • 在C++ 中 使用new delete申请和释放内存。
  • 在C++ 中 申请数组是 new 数据类型[长度] 释放数组是delete[] 变量名;
  • 注意 如果是new的数组则必须使用delete数组形式释放,否则会出现问题。
 int *p = new int;delete p;p = NULL;int *pp = new int[100];delete[] pp;

三、匿名函数或lambda

没有函数名的函数,C++11特性。

语法:
[外部引用参数](参数列表)[->返回的数据类型]
{
  函数体
}
外部引用参数:
&:  以引用方式获取所有当前作用域内的变量,需要注意声明周期
=: 以拷贝方式获取外部变量
变量名:  以拷贝方式获取作用域内的变量名
   变量名1,变量名2,…
&变量名:  以引用方式捕获一个变量
   &变量名1,&变量名2,…

实例:

void Sort1(std::function<int(void*, void*)> f)
{f(NULL, NULL);
}int main()
{int a = 100;获取lambda函数的第一种方式//auto    自动推导数据类//它是根据右值推导数据类型//并且必须要有右值auto f = [&](){printf("hello world!\n");a = 300;};f();printf("%d\n", a);auto f1 = [=](){printf("hello world %d\n", a);};f1();auto f2 = [a, &p](){printf("hello world %d %x\n", a, &p);};f2();auto f3 = [a, &p](int m)->int{printf("hello world %d %d\n", a, m);return 100;};printf("%d=====\n", f3(1000));获取lambda函数的第二种方式// 需要引用头文件 functional// std::function<函数的声明的返回值(函数形参)> 它是一个数据类型std::function<int(int)> f5 = [a, &p](int m)->int{printf("hello world!%d %d\n", a, m);return 100;};printf("%d=====\n", f5(1000));std::function<int(void *, void*)> f6 = [](void *p1, void *p2)->int{return *(int*)p1 > *(int*)p2;};Sort1(f6);return 0;
}

游戏开发之extern “C“、内存申请及匿名函数(lambda)(C++基础)相关推荐

  1. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  2. DirectX游戏开发之2D文字的实现

    DirectX游戏开发之2D文字的实现 文字是承载信息最有效的载体之一,各种游戏程序都离不开文字的显示.对于3D文字来说,2D文字有其渲染的高效性和实现的简洁性. 2D文字的显示无论在写2D游戏还是在 ...

  3. 开发中的“软”与“硬”:高画质移动游戏开发之道

    摘要:游戏的效果不仅与游戏引擎的渲染相关,与硬件优化也有千丝万缕的联系.一款基于芯片优化的移动游戏界面,甚至可以堪比视频游戏的视觉效果.高通半导体事业部资深经理刘晓光从软硬件两个层面分享了移动游戏开发 ...

  4. DirectX游戏开发之3D角色动起(下)

    DirectX游戏开发之3D角色动起(下) 直接先上图吧! 动作idle 动作attack 动作walk 动作run 看,多动作的模型搞下来了.原则上只要在此基础上略做修改就可以实现3d游戏的基本制作 ...

  5. 游戏开发之U3D实现技能图标冷却的效果

    游戏开发之U3D实现技能图标冷却的效果 --本次使用的NGUI插件.     制作思路:NGUI插件里面有个UISprite组件,在它上面有个属性叫Type,改变相应的Type类型有不同的作用,本次使 ...

  6. 游戏开发之U3D插件EasyTouch5.x使用

               游戏开发之U3D插件EasyTouch5.x使用 本篇只讲EasyTouch5.x的使用,不讲源码.本来想把EasyTouch5.x的使用手册翻译一遍,想来也是没那个时间. 第一 ...

  7. 微信小游戏开发之CocosCreator多分辨率场景适配方案

    主题 Cocos Creator不同手机分辨率的背景图像和场景内容适配 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文 ...

  8. libGDX游戏开发之Box2D(十四)

    libGDX游戏开发之Box2D(十四) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goo ...

  9. JAVA游戏开发之FPS精准控制

    目录 JAVA游戏开发之FPS精准控制... 1 1       概述... 2 1.1        编写目的... 3 2       FPS精准控制... 3 2.1        FPS描述. ...

  10. Unity游戏开发之C#快速入门

    C#是微软团队在开发.NET框架时开发的,它的构想接近于C.C++,也和JAVA十分相似,有许多强大的编程功能. 个人感受是C#吸收了众多编程语言的优点,从中可以看到C.C++.Java.Javasc ...

最新文章

  1. scrapy多个page爬取, post请求, 通过爬到的URL继续发请求爬页面
  2. 学好python工资一般多少钱-Python工资多少?就业发展前景怎么样?
  3. js 常用倒计时功能:
  4. 问题:三元向量的比较
  5. Python与机器视觉(x)windows下import cv2报错dll
  6. CVPR2021 | 最新CVPR2021论文抢先看,附全部下载链接!
  7. 查看某个进程的线程在干什么_有了多线程,为什么还要有协程?
  8. swift 笔记 (十三) —— 继承
  9. 如何从PDF文件中提取几页为一个PDF文件?
  10. QT mindmap
  11. 我叫mt4公会攻城战服务器维护中,我叫MT4工会攻城战攻略玩法详解[多图]
  12. mysql8远程连接报错_远程连接MYSQL8.0服务器问题
  13. 孙空空的Vue之路-Day07-事件处理
  14. php excel导入功能
  15. python入门指南
  16. 【徕卡全站仪Geocom开发】开发日志#01
  17. 辅修计算机编程,求帮忙~计算机C语言的编程题!大学选的辅修课没去过,要考试了不会? 爱问知识人...
  18. php微博cookie获取,python模拟新浪微博登陆之获取cookies-Go语言中文社区
  19. (五)苏世民:我的经验和教训:成功人生的十大信条
  20. 移动联通电信老用户换套餐方法

热门文章

  1. 从Word Embedding到Bert模型——自然语言处理预训练技术发展史
  2. 如何改善字幕组同学「为爱发电」的工作环境?
  3. 每日算法系列【LeetCode 328】奇偶链表
  4. 解密阿里云之飞天平台内核
  5. 企业如何确定需要什么样的产品经理
  6. 《Java程序员职场全攻略:从小工到专家》连载十三:给自己估个好价
  7. pandas小记:pandas数据规整化-缺失、冗余、替换
  8. sklearn学习笔记之metrics
  9. 加速爬虫:异步加载asyncio
  10. php解密 hr+c_PHP每15分钟自动更新网站地图(减少服务器消耗)