本文系对「C++ Rvalue References Explained」 该文的翻译,原文作者:Thomas Becker. 该文较详细的解释了C++11右值引用的作用和出现的意义,也同时被Scott Meyers推荐,全文共分11个部分,我将利用业余时间,分别翻译. 受笔者水平所限,可能叙述会出现些许问题,还望多多指正. 部分名词为了保持含义和方便理解,并未翻译成中文,有的在括号内给出了常见的中文翻译. 目录 概述 Move语义 右值引用 强制Move语义 右值引用就是右值吗? Move语义…
本文为第三部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/4220233.html. 右值引用 如果x是任意类型,那么x&&则被称作一个对x的右值引用(rvalue reference).为了更好区分,原来的引用x&现在也被称作左值引用(lvalue reference). 一个右值引用是一种同原始引用x&的行为非常类似的类型,但是有一些特例.最重要的一个就是当面临方法重载决议的时候,左值倾向于旧式的左值引用,而右值偏向于新的…
本文为第八部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/cpp-rvalue-references-explained-introduction.html. Perfect Forwarding(完美转发):解决方案 对右值引用的两个规则中的第一个也同样影响了旧式的左值引用.回想在pre-11 C++时,对一个引用取引用是是不被允许的,比如A& &会导致一个编译器错误.相比之下,在C++11中,引入了如下所示的引用折叠规则(referenc…
本文为第五部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/cpp-rvalue-references-explained-introduction.html. 右值引用就是右值吗? 同之前一样,给出一个X类,让我们可以重载它的拷贝构造函数和拷贝赋值操作符来实现move语义.现在做如下考虑: void foo(X&& x) { X anotherX = x; // ... } 一个有趣的问题就是,在foo函数内,哪一个x的拷贝构造函数重载将会被…
本文为第六部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/cpp-rvalue-references-explained-introduction.html. Move语义和编译器优化 考虑下面这样的函数定义: X foo() { X x; // perhaps do something to x return x; } 现在同以前一样进行假设,给出一个X类,我们可以通过重载它的拷贝构造函数和拷贝赋值操作符来实现move语义.如果你看了一眼上面的函…
本文为第四部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/4220233.html. 强制Move语义 众所周知,正如C++标准的第一修正案所陈述:“委员会不会建立任何试图绊住C++程序员的脚的规则.(The committee shall make no rule that prevents C++ programmers from shooting themselves in the foot.)”,正经来说,就是当面临给予程序员更多控制还是减…
为AssetBundles准备资源 使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle.但是,在设置Bundles时,需要考虑一些策略.这些分组策略可以使用到任何你认为适合的特定项目中.你可以随心所欲地混合和匹配这些策略. 逻辑实体分组 逻辑实体分组是根据其所代表的项目的功能部分将资产分配给AssetBundles的.这包括诸如用户界面.人物.环境以及在整个应用程序的整个生命周期中频繁出现的其他部分. 例子 把用户界面的所有纹理和布局数据打包到一起 把人物角色…
AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如AssetBundle A中的一个材质可以引用AssetBundle B中的一个纹理.为了通过网络进行有效的传递,可以根据用例要求,选择内置算法(LZMA和LZ4)来对AssetBundles进行压缩. AssetBundles可用于可下载内容(DLC),减少初始安装大小,加载为最终用户平台优化的资…
对于理解服务器和网络来说,「协议」是不可缺少的概念. 「协议(protocol)」有「规则,规定」的意思. 实际上「协议」的函数很广,在通信领域,「协议」规定了「在通信时,什么样的情况下,以什么样的顺序,什么样的方式交互什么样的数据」. 抽象的去理解「协议」可能会比较困难,下面来举个例子. 通过Web以HTML方式交互时使用的协议是「HTTP」(Hyper Text Transfer Protocol).这个协议最重要的就是规定了服务器和客户端之间以HTML方式交互的规则. 比如,客户端连接上服…
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 不论新老朋友 我相信您都可以 从中获益.如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Part 1. 接口概述 Java 是单继承的.这意味着子类仅从一个父类继承.通常,这就是你需要的.有时候多继承会提供方便,但也会造成混乱,例…
上次介绍了Linus Torvalds, 这次介绍他开发的「内核」. 经常听人提到「Linux kernel」,但如果被问到「kernel究竟是什么?」的话,会出乎意料的觉得难以回答. 那么,kernel到底是什么呢?「kernel」翻译过来就是「核心」的意思,简单来说,「Linux的核心程序就是Linux kernel」. 其实严格来说,「Linux」就是指「Linux kernel」.(最近,「Linux发行版」简称为「Linux」的情况越来越多) 将Linux kernel解释成「系统核心…
作为新年的第一次,这次想简单介绍下Linus这个人.(这篇文章是作者新年初写的,所以有这么句话) Linux之父,同时也是现在linux内核开发最终决定的人物就是「Linus Torvalds」.「Linux」这个名字也是从「Linus」的名字中来的. Linus Torvalds,1969年12月出生于芬兰的程序员.他在赫尔辛基大学读书时,开发了Linux系统的最初版本. 当时,Linus感到有必要开发一个能在当时PC中处于主流地位的Intel i386电脑上运行的兼容UNIX的OS. 说是开…
这次说说「端口」和「端口号」. 平时经常会听人说「打开了80号端口」,为了安全「不要打开多余的端口」等等.那么,这里的端口或者端口号是什么呢? 首先,「端口」是TCP或者UDP上使用的概念,经常被比喻成「窗口」.而且,端口号也被比喻成窗口编号. 举个例子,比如去邮局汇款时,并不是每个窗口都可以汇款的,只有特定的窗口才能办理汇款业务.所以,每个窗口都会编号. 端口号和上面的情况类似,比如,Web服务器通过HTTP接受通信的时候,是通过Web服务器的80号端口来通信的. 同样,SMPT使用25号端口…
这次聊聊「单CD Linux」. 所谓「单CD Linux」,就是不用安装,从CD-ROM启动后就可以使用的Linux. 有名的KNOPPIX就是「单CD Linux」,此外还有Puppy Linux.最近,Fedora和Gentoo也以「Live CD版」或者「Live DVD版」的方式发布了不用安装也能使用的Linux了. 那么,「单CD Linux」或者「Live CD」的方式有什么优势呢? 优势之一,因为不用安装,直接从CD-ROM启动后就能使用,所以最适合评价一个Linux发行版.即,…
这次,聊聊关于「命令行提示符」的相关内容. bash之类的Shell程序是操作Linux所不可缺少的东西.其中bash的提示符也有承担了很重要的作用. 「命令行提示符」的英文是「command prompt」,其中「prompt」有促使,推动的意思,根据这个意思,Shell中的「命令行提示符」就有促使,推动用户输入的意思. (下面的说明以bash为例,bash是Shell程序的一种) 目前的Linux发行版中,提示符一般都像下面这样: [user@host001 /etc]$ 上面这个提示符中包…
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑: 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作: 强大的 CRUD 操作:内置通用 Mapper.通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求: 支持 Lambda 形式调用:通过…
构建AssetBundles 在AssetBundle工作流程的文档中,我们有一个示例代码,它将三个参数传递给BuildPipeline.BuildAssetBundles函数.让我们更深入地了解我们实际上在说什么. Assets/AssetBundles:这是AssetBundles将被输出到的目录.您可以将其更改为所需的任何输出目录,只需在尝试构建之前确保文件夹实际存在. BuildAssetBundleOptions 有多种不同的BuildAssetBundleOptions选项可以选择.…
这次聊聊「日志」. 「日志」主要指系统或者软件留下的「记录」.出自表示「航海日志」的「logbook」. 经常听说「出现问题的时候,或者程序没有安装自己预期的来运行的时候,请看看日志!」. 确实,记录了系统和软件详细运行情况的「日志」是信息的宝库,通过日志来解决问题的事例也非常多. 但事实上,「无论如何也不会看日志」的用户也有很多.理由很简单,日志的信息量非常大,全部用眼睛来看的话是非常吃力的. 而且,英语写的日志也会让英文不好的人敬而远之. 虽说「要养成用眼睛来看日志的习惯」,但实行起来却非常…
这次聊聊「LDAP」. LDAP是「Lightweight Directory Access Protocol」的所有,从名字上可以看出是协议的一种. LDAP是访问数据库(层次型数据库)的组件.管理的数据主要是用户名,密码等「账户信息」,以及其它用户信息. LDAP用于「统一管理多台计算机的用户相关信息」.比如,对于教育机关或者企业等,有很多机器,也有很多用户的场合,LDAP就非常有帮助. 如果没有LDAP这种统一管理的组件,每台机器的用户信息都必须要一个一个进行登录.当然,用户信息发生变化的…
这次聊聊「DNS服务器」. DNS(Domain Name System)服务器,也被称为域名服务器. 因为使用互联网的时候,必须要指定DNS服务器,所以你一定听过DNS这个名字吧. 那么,这个DNS服务器是干啥用的呢? 通过互联网连接其他主机的时候,用户一般会输入类似「www.lpi.or.jp」这样的主机域名. 这种域名对用户来说很好理解.但是计算机是通过「202.218.212.222」这样的IP地址来识别网络的主机的. DNS服务器的任务就是建立这种域名和IP地址的对应关系. 粗略来说,…
这次,聊聊补丁. 当有bug或者安全漏洞的时候,就会发布补丁.打上补丁之后,就能解决相应的bug或者安全漏洞. 那么,「补丁」到底是什么呢? 「补丁」只有少量的代码,一般都是对程序的一部分进行更新或者追加,包括bug修正,安全漏洞修正,功能追加或者变更等等.当然,只有「补丁」是无法运行的. 即,只有将「补丁」附加到原来的程序中,更新原来的程序后,才能运行. 「补丁(patch)」本来是指「打补丁用的小布头」.「patch」正是为了补足现有的程序,堵住程序漏洞的「布头」. 打「补丁」的时候需要用到…
这次聊聊 「服务器」 这个词. 可能会觉得为什么「突然问这个?」.接下来请先考虑一下下面的题目. A) 「Web服务器是指提供网页数据的软件」 B) 「Web服务器是指运行上述软件的硬件」 那么,究竟那句话是对的呢? 答案是:2句都是对的. 也就是说,提到「服务器」的时候,可能是指软件,也可能是指硬件.比如,「Apache」软件是Web服务器,运行Apache,并提供网页信息的硬件也被称为「服务器」. 所谓专业术语,也有非常麻烦的一面,比如有名的Linux,严格来说应该只是指的内核部分. 提到「…
这次说说「cron」. 「cron」就是「定期自动执行任务的工具」(相当于windows中的计划任务).读做「库隆」.使用「cron」,可以预先指定任务在某个时间执行. 时间的指定并不只是「一小时一次」这种简单的指定方法,还可以指定只有某天的某时才执行任务,或者指定8点-22点每小时执行一次等等. 还可以指定到具体的时间(可以具体到分钟).使用起来有些规则,但不是很难. 「cron」被称为运用Linux所不可缺少的工具.可用来定期的管理获取日志的软件,定期的检查系统状态. 甚至可用来监视进程或者…
这次,继续聊聊「虚拟化技术」. 根据上回的介绍,虚拟化技术可以使「计算机的台数和运行的OS的个数的比例不再是1:1」.这回介绍一下如何使用这个技术. 使用方法之一,「一台计算机上运行多个OS」.从个人用户的观点来看,这是最贴近个人用户的使用方法. 在已有的OS上通过虚拟化机安装Linux,然后在虚拟机上学习Linux的人有很多. 还有一种使用方法,实际上这种使用方法一直受到极大的关注,这种使用方法就是「将多台计算机构成一个系统」. 这种方法将多台计算机的计算能力汇集到一个系统中,可以大大提供系统…
这次说说关于Shell的东西. 「Shell」是看不见实体的,所以理解起来可能会有些困难. 最近的Linux发行版默认都是用X Window System来操作的(也就是图形化操作),所以很少见到有人会多余的去问「Shell是什么?」 UNIX系的OS的Shell是指「连结OS内核和用户的命令行接口」,命令行接口就是不使用鼠标,通过键盘输入字母文字等来和系统进行交互的接口. 即,Shell就是内核和用户之间通过文字交互的程序. X Window System启动后,同时按下 Ctrl+Alt+F…
上次,从「计算机的内部构造」的角度解释了架构这个术语.这次,介绍下架构中经常提到的「i386架构」及之后的「i486」,「i586」. 安装Linux的时候,很多人即使不了解但也会经常听到i386架构这个词.因此,会误认为「自己的PC的架构是i386架构的」.现在用i386的人是非常少的. i386的 i 就是「Intel」的首字母.i386是1985年发布的架构,那么如今还在用i386电脑的人... ...将近20年没有换过电脑了.(这篇文章应该是作者2005年左右写的) 实际上i386的CP…
这次介绍下新闻上提到的「小型移动式PC」.(这个当时日本新闻上的内容) 最近,经常在日本的大卖场中看到一种小型的移动式PC.不仅是小巧方便携带,而且价格也便宜.而且,省电功能的加入,使电池能工作更长的时间. 但是,由于这种PC比较小,可能也不太适合长时间的使用. 根据新闻的说法,这种小型的移动PC在国外有很多都是安装的Linux操作系统的.原因之一是「消减成本」. 这种被成为「NETBOOK」(上网本)的PC,是由美国的一个被称为 OLPC 的 NPO 率先发起的项目,这个项目的目的是为了给发展…
实际上,「别名」被用在多种场合下.比如「命令的别名」,「邮件地址的别名」等等. 所以,单独说「别名」的时候,根据不用的场合,代表的意思也不一样. 一般来说,「别名」是指意思差不多的东西. 「别名」的英文是「alias」,日语就是「别名」. 说「邮件地址的别名」的时候,也可以看出别名的含义. 比如将「foo@example.com」设为「bar@example.com」,以「bar@example.com」为接收方的邮件就会发给「foo@example.com」. Linux中经常使用的除了邮件地…
安装Linux的时候,需要对硬盘进行分区.那么「分区」到底是什么呢? 「分区」在日语中有区分,分割的意思.计算机术语中有时会说「对一个磁盘进行分区」,整个意思就是指定如何分割磁盘的意思. 「对磁盘进行分区」中的「分区」,现在多是用来表示磁盘分割后的一个一个独立的空间. 把磁盘分区之后,1个物理磁盘可以当成多个磁盘那样来使用了. Windows在安装的时候经常不对磁盘进行分区,而linux安装时几乎都会对磁盘进行分区.那么,分区的目的是什么呢? 对磁盘进行分区的目的有很多.最容易理解的就是,假如一…
说起module(模块),有的像「可热插拔的零部件」的意思. 在讨论Linux时提到的模块一般是指可以组装到内核中的模块. 模块这个概念是在硬件和程序设计领域中广泛使用的概念.我们这次说的模块特指Linux内核中的模块. 内核模块简单来说就是「作为内核程序主体的一个小配件来使用的程序」,也就是说,只有模块是什么也做不了的.安装到内核中才能起作用. 比如有一个新的设备或者一个新的功能想要追加到内核中时,就可以用模块的方式来实现.(设备驱动最好考虑用内核模块的方式来提供) 此时,如果把相应的模块直接…