计算机语言编程
文章平均质量分 83
计算机语言编程
戎夏不姓夏
正在从小菜鸟到老菜鸟的路上奋斗着!
展开
-
C++调用虚函数是如何确定是虚函数表中的哪一项?
class Base{public:virtual func1() {};virtual func2() {};}class Child : public Base{public:virtual func1() {};virtual func3() {};}Base* b = new Child();b->func1();要讨论的是 `b->func1()`编译器以及运行时是怎么操作的先说结论:1.编译器会给每个虚函数指定一个在虚函数表中的索引...转载 2021-07-26 00:51:46 · 715 阅读 · 1 评论 -
Lua读写文件
lua里的文件读写模型来自C语言,分为完整模型(和C一样)、简单模型。1、简单模型io.input([file]) 设置默认的输入文件,file为文件名(此时会以文本读入)或文件句柄(可以理解为把柄,有了把柄就可以找到文件),返回文件句柄。io.output([file]) 设置默认的输出文件,参数意义同上。io.close([file]) 关闭文件,不带参数关闭默认的文件io.read(formats) 读入默认文件,formats取值为"*a"(读入全部)、“*n”(按数字读入)、 "..原创 2021-05-30 16:30:14 · 4973 阅读 · 0 评论 -
Python
工作中一直在使用Jenkins(开源的可扩展持续集成引擎)进行更新出包,打包机本地打包操作是通过python脚本执行的,在排查问题的时候,python代码有些东西是在看不懂,所以花点时间总结了一下常用的,希望能帮到有需要的人,也作为自己的学习总结。有错误的地方也欢迎各位指出。入口函数python的入口函数类似于C++脚本中main()函数,不过Python属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。python脚本文件除了可以直接再pyth..原创 2021-05-08 16:59:29 · 131 阅读 · 0 评论 -
std::function
通过std::function对C++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function对象;让我们不再纠结那么多的可调用实体。其中Lambda表达式也是C++11新增的内容。具体还不了解,应该类似于C Sharp中的Lambda表达式吧!#include <functional>#include <iostream>using namespace std;std::function<转载 2021-04-28 20:04:01 · 192 阅读 · 0 评论 -
Cocos2dx-lua在Win32平台调试输出配置
新建项目:在main.cpp中加入以下代码:#ifdef USE_WIN32_CONSOLE AllocConsole(); freopen("CONIN$", "r", stdin); freopen("CONOUT$", "w", stdout); freopen("CONOUT$", "w", stderr);#endif AllocConsole函数不能改变控制台窗口在屏幕上的位置、尺寸等属性。以下函数可以控制&获取控制台相关信息。GetConsol原创 2021-04-07 19:39:35 · 511 阅读 · 0 评论 -
使用VSCode调试C++工程
官方教程:https://code.visualstudio.com/docs/cpp/config-mingwtasks.json 负责编译生成可执行文件(.exe)launch.json 进行代码调试c_cpp_properties.json 拓展1.这里用添加引用eigen类库举例:首先添加eigen库的路径到IncludePath. (c_cpp_properties.json){ "configurations": [ {原创 2021-04-03 23:28:04 · 571 阅读 · 0 评论 -
Lua中的userdata
原文http://www.jellythink.com/archives/587话从这里说起在我发表《Lua中的类型与值》这篇文章时,就有读者给我留言了,说:你应该好好总结一下Lua中的function和userdata类型。现在是时候总结了。对于function,我在《Lua中的函数》这篇文章中进行了总结,而这篇文章将会对Lua中的userdata进行仔细的总结。对于文章,大家如果有任何疑议,都可以在文章的下方给我留言,也可以关注我的新浪微博与我互动。学习,就要分享,我期待你的加入。use..转载 2021-03-30 02:03:15 · 685 阅读 · 0 评论 -
Lua设计与实现--GC
本文转载自知乎专栏作家@张德嘉 的 Lua设计与实现,链接地址:https://zhuanlan.zhihu.com/p/144875092。1.背景和C#、Java类似,lua采用了Mark&Sweep的算法来进行垃圾回收,与之相对的还有个常用算法是Automatic Reference Counting(ARC)。Mark&Sweep的优点在于不用像ARC在每次赋值操作去操作引用计数(对于动态语言效率有较大影响),也不会有环形引用的问题,但是由于Mark&Sweep在触发转载 2021-03-29 11:20:07 · 363 阅读 · 0 评论 -
Lua设计与实现--函数
本文转载自知乎专栏作家@张德嘉 的 Lua设计与实现,链接地址:https://zhuanlan.zhihu.com/p/61441722。函数是任何语言设计里都不可或缺的一环,因为代码的执行几乎完全是依附在函数body里来完成的。本文主要从lua函数的C源码实现机制着手,来介绍lua函数的设计和实现特点。1. 函数闭包首先,所有的lua函数,都是一个函数闭包。函数闭包是目前主流语言几乎都支持的一个机制,它指的是一个内部结构,该结构存储了函数本身以及一个在词法上包围该函数的环境,该环境包含了函数转载 2021-03-29 11:16:54 · 370 阅读 · 0 评论 -
Lua设计与实现--Table
本文转载自知乎专栏作家@张德嘉 的 Lua设计与实现,链接地址:https://zhuanlan.zhihu.com/p/87400150。Table的设计哲学table应该算是lua最灵魂的一个结构了。它有以下特点:容器功能:与其他语言相似,lua也内置了容器功能,也就是table。而与其他语言不同的是,lua内置容器只有table。正因为如此,为了适配不同的应用需求,table的内部结构也比较考究,分为了数组和哈希表两个部分,根据不同需求来决定使用哪个部分。 面向对象功能:与其他语言不同的转载 2021-03-29 11:10:51 · 321 阅读 · 0 评论 -
Lua设计与实现--虚拟机
本文转载自知乎专栏作家@张德嘉 的 Lua设计与实现,链接地址:https://zhuanlan.zhihu.com/p/61888678。同时,本文虚拟机的概念和类型划分的内容主要参考了这篇blog的,里面讲的挺详细的。虚拟机基本概念虚拟机指借助软件系统对物理机器指令执行进行的一种模拟。首先,对于物理机器的执行,主要是机器从内存中fetch指令,通过总线传输到CPU,然后进行译码、执行、结果存储等步骤。既然虚拟机是对其进行的一种模拟,那么也逃不过以下几个特点:将源码编译成VM所能执行的字节转载 2021-03-29 11:07:38 · 313 阅读 · 0 评论 -
Lua设计与实现--字符串
本文转载自知乎专栏作家@张德嘉 的 Lua设计与实现,链接地址:https://zhuanlan.zhihu.com/p/61441722。长串和短串在讲String的数据结构和重要函数前,先强调一点,出于对性能和内存等方面的考虑,lua对String实现的方方面面,都把短字符串和长字符串区分开来处理了。比如短串会走一个先查询再创建的路子,而长串不查询,直接创建。我个人的理解大概是出于以下两个方面考虑:复用度。短串复用度会比长串要高,或者说短串在全局的引用计数一般会比长串高。比如obj["id"转载 2021-03-29 11:03:27 · 640 阅读 · 0 评论 -
Lua设计与实现--数据类型
本文转载自知乎专栏作家@张德嘉 的 Lua设计与实现,链接地址:https://zhuanlan.zhihu.com/p/61331607。数据类型Lua中的数据类型主要分为以下几类:可以看到除了LUA_TNONE,lua支持了9种基本类型。其实对于某些基本类型,lua还用了一个叫做variant tag的标记来定义其子类型,具体参见下图:比如string又细分为短string和长string,主要区别在于它们的hash值生成;而number也细分为了float和inte..转载 2021-03-29 11:00:59 · 275 阅读 · 0 评论 -
Lua-Coroutine(协同例程)
Lua 支持 coroutine ,这个东西也被称为协同式多线程 (collaborative multithreading) 。Lua 为每个 coroutine 提供一个独立的运行线路。然而和多线程系统中的线程不同,coroutine 只在显式的调用了 yield 函数时才会挂起。coroutine.create(func)创建一个 coroutine 需要调用一次coroutine.create()。它只接收单个参数,这个参数是 coroutine 的主函数。create函数仅仅创...转载 2020-12-29 16:14:15 · 426 阅读 · 0 评论 -
【Lua】面向对象的实现方式
第一种实现方式:(实现了私有变量和公有变量)local BaseClass = { ctor = function (self, params) self._name = params.name or "John" self._sex = params.sex or "man" end, new = function (mt, params) local instance = { privateElem.原创 2020-12-09 18:30:23 · 310 阅读 · 0 评论 -
Lua中正则表达式的使用整理
在Lua中使用正则表达式进行模式匹配的string库函数有这四个:string.find(str, pattern[, init[, plain]])string.gsub(str, pattern, repl[, n])string.match(str, pattern[, init])string.gmatch(str, pattern)这几个函数的使用方法在前面Lua中string常用api用法整理已经介绍过了,这里就不赘述了!在Lua中进行模式匹配的时候支持的字符类如下:转载 2020-12-08 17:28:06 · 556 阅读 · 0 评论 -
Lua 表(table)
介绍表(Table)是Lua语言中最主要(事实上也是唯一的)和强大的数据结构。使用表,Lua语言可以以一一种简单、统一且高效的方式表示数组、集合、记录和其他很多数据结构。Lua语言也使用表来表示包( package )和其他对象。当调用函数math.sin时,我们可能认为是“调用了math库中函数sin”; 而对于Lua语言来说,其实际含义是“以字符串"sin"为键检索表math”。Lua语言中的表本质上是一种辅助数组( associative array ),这种数组不仅可以使用数值作为索引,也可转载 2020-06-02 21:39:47 · 4500 阅读 · 0 评论 -
C++ std::map
模板:template < class Key, // map::key_type class T, // map::mapped_type class Compare = less<Ke...翻译 2020-02-24 21:51:57 · 586 阅读 · 0 评论 -
C++类模板(模板类)详解
人们需要编写多个形式和功能都相似的函数,因此有了函数模板来减少重复劳动;人们也需要编写多个形式和功能都相似的类,于是C++引人了类模板的概念,编译器从类模板可以自动生成多个类,避免了程序员的重复劳动。例如,在《C++运算符重载》一章中的《C++实现可变长度的动态数组》一节中,我们实现了一个可变长的整型数组类,可能还需要可变长的 double 数组类,可变长的 CStudent 数组类,等等。...转载 2020-02-24 20:49:51 · 406 阅读 · 0 评论 -
C++ std::unordered_map
模板:template < class Key, // unordered_map::key_type class T, // unordered_map::mapped_type class Ha...翻译 2020-02-24 20:42:38 · 526 阅读 · 0 评论 -
C++ 友元(友元函数 && 友元类)
私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦。C++是从结构化的C语言发展而来的,需要照顾结构化设计程序员的习惯,所以在对私有成员可访问范围的问题上不可限制太死。C++ 设计者认为, 如果有的程序员真的非常怕麻烦,就是想在类的成员函数外部直接访问对象的私...原创 2020-02-24 15:30:08 · 462 阅读 · 0 评论 -
C++ 四种类型转换操作符
在c++中进行类型转换只需要在变量前加上变量类型,并且转换是双向的。例如:int i = 0;double d = 1.9;int i1= (int) d;double d1= (double) i;这种类型转换方式只适用于基本数据类型,对复杂的自定义类型不适用。因此,C++中提供了四种类型转换符:static_cast、dynamic_cast、const_cast...转载 2020-02-22 17:22:27 · 1184 阅读 · 0 评论 -
C++ std::function
定义:template <class T> function; // undefinedtemplate <class Ret, class... Args> class function<Ret(Args...)>;该类可以将任何类型的可调用元素(如函数和函数对象)包装到可复制对象中,且其类型仅取决于其调用签名(而不取决于可调用元素类型本身...原创 2020-02-22 16:31:34 · 284 阅读 · 0 评论 -
C++ std::bind
simple(1)template <class Fn, class... Args> /* unspecified */ bind (Fn&& fn, Args&&... args);simple(2)(带返回类型)template <class Ret, class Fn, class... Args> /*uns...翻译 2020-02-21 21:41:17 · 139 阅读 · 0 评论 -
C++ Typedef和define的用法
Define定义:define,宏定义,C语言中预处理命令一种。分为无参宏定义和带参宏定义。无参宏定义的一般形式为:#define 宏名字符串; 带参宏定义的一般形式为:#define 宏名(参数表)字符串。#define 命令是 C 语言中的一个宏定义命令 ,它用来将一个标识符定义为一个字符串 , 该标识符被称为宏名, 被定义的字符串称为替换文本。[1]该命令有两种格式...原创 2020-02-20 19:29:10 · 611 阅读 · 0 评论 -
C++ td::nothrow
定义:std::nothrow被用来作为new操作符的一个参数。平时使用new申请内存失败的话会直接抛出bad_alloc异常。如果使用new(std::nothrow)申请内存失败的话,此时不会抛出一个异常而是返回一个空指针。这个常量是nothrow_t的一个值,他的作用是触发new操作符的另一个版本的重载方法(该重载方法接受一个nothrow_t类型的参数)。默认情况下,n...翻译 2020-02-20 16:14:38 · 601 阅读 · 0 评论 -
事件驱动编程、消息驱动编程、数据驱动编程
事件驱动基本概念 窗口/组件 事件 消息(队列) 事件响应(服务处理程序) 调度算法 进程/线程 非阻塞I/O 程序的执行可以看成对CPU,内存,IO资源一次占用 现代操作系统支持多任务,可以分时复用上述资源. 1. 为什么采用事件驱动模型?事件驱动模型也就是我们常说的观察者,或者发布-订阅模型;理解...转载 2020-02-10 14:53:47 · 6994 阅读 · 1 评论 -
C++构造函数后加:的作用
初始化父类 class Base{ protected: int index; public : Base(int i) { index=i; }};class Child:public Base{ private: string n...原创 2019-11-22 19:12:14 · 903 阅读 · 1 评论