Ordinary

第4章 可变参数模板:4.3 可变参数模板的应用

为君一笑 提交于 2020-04-19 14:37:05
4.3 Application of Variadic Templates 4.3 可变参数模板的应用 Variadic templates play an important role when implementing generic libraries, such as the C++ standard library. 可变参数模板在实现通用库(如C++标准库)时扮演着一个非常重要的角色。 One typical application is the forwarding of a variadic number of arguments of arbitrary type. 一个经典的应用就是对数量不定的任意类型参数进行传发。 For example, we use this feature when: 例如,我们在以下几种情况下使用这个特性: • Passing arguments to the constructor of a new heap object owned by a shared pointer: 将参数传递给shared_ptr所拥有的新堆对象的构造函数: // create shared pointer to complex<float> initialized by 4.2 and 7.7: auto sp = std::make_shared

第2章 类模板:2.4 友元

半世苍凉 提交于 2020-04-16 07:25:30
【推荐阅读】微服务还能火多久?>>> 2.4 Friends 2.4 友元 Instead of printing the stack contents with printOn() it is better to implement toperator<< for the stack. However, as usual operator<< has to be implemented as nonmember function, which then could call printOn() inline: 与其使用printOn()打印栈内容,不如为栈实现operator<<运算符。但是,通常oeraptor<<必须实现为非成员函数,然后以内联方式调用printOn()。 template<typename T> class Stack { … void printOn() (std::ostream& strm) const { … } friend std::ostream & operator << (std::ostream& strm, Stack<T> const & s) { s.printOn(strm); return strm; } }; Note that this means that operator<< for class Stack<> is

Android NDK c创建新的线程

独自空忆成欢 提交于 2020-03-14 20:17:21
在jni的c/c++层创建一个新的线程只需要3步: 1.导入库 #include<pthread.h> 2.写好线程要做的事 void* run_1(void*); void* run_1(void* args){ ... } 3.调用方法 pthread_t thread_1; pthread_create(&thread_1,NULL,run_1,args); /////////////////////////////////////////////////////////////////////////////////// 但是这样的线程,缺少了JNIEnv指针,好像干不了什么事,所以就要做这个基础上,得到JNIEnv指针,并将该线程依附于java虚拟机之上,这样这个线程像java层过来的线程一样,能够干很多事情。 官方文档关于attachCurrentThread()的说明,好像勉强看得懂,就翻译一下试试。。。 The JNI interface pointer (JNIEnv) is valid only in the current thread. Should another thread need to access the Java VM, it must first call AttachCurrentThread() to attach itself to

JVM之压缩指针(CompressedOops)

心不动则不痛 提交于 2020-02-28 04:21:09
对于32位机器,进程能使用的最大内存是4G。如果进程需要使用更多的内存,需要使用64位机器。 对于Java进程,在oop只有32位时,只能引用4G内存。因此,如果需要使用更大的堆内存,需要部署64位JVM。这样,oop为64位,可引用的堆内存就更大了。 注:oop(ordinary object pointer),即普通对象指针,是JVM中用于代表引用对象的句柄。 在堆中,32位的对象引用占4个字节,而64位的对象引用占8个字节。也就是说,64位的对象引用大小是32位的2倍。 64位JVM在支持更大堆的同时,由于对象引用变大却带来了性能问题: 增加了GC开销 64位对象引用需要占用更多的堆空间,留给其他数据的空间将会减少,从而加快了GC的发生,更频繁的进行GC。 降低CPU缓存命中率 64位对象引用增大了,CPU能缓存的oop将会更少,从而降低了CPU缓存的效率。 为了能够保持32位的性能,oop必须保留32位。那么,如何用32位oop来引用更大的堆内存呢? 答案是压缩指针(CompressedOops)。 JVM的实现方式是,不再保存所有引用,而是每隔8个字节保存一个引用。例如,原来保存每个引用0、1、2...,现在只保存0、8、16...。因此,指针压缩后,并不是所有引用都保存在堆中,而是以8个字节为间隔保存引用。 在实现上,堆中的引用其实还是按照0x0、0x1、0x2..

关于YYYY 与 yyyy

徘徊边缘 提交于 2020-01-07 04:18:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今天线上报了一个很严重的问题,就是在上传服务端数据的时候,2019-12-31 全部上传的 2020-12-31了。 这才发现关于YYYY 与 yyyy的坑。 直接上链接吧。 NSDateFormatter 'YYYY' 和 'yyyy' 的区别 日期格式 YYYY-MM-dd 和 yyyy-MM-dd 有什么区别? 总结就是 两个计算年的方式不一样。有可能会出现对不上。 Also when using a date format string using the correct format is important. @"YYYY" is week-based calendar year. @"yyyy" is ordinary calendar year. A common mistake is to use YYYY. yyyy specifies the calendar year whereas YYYY specifies the year (of “Week of Year”), used in the ISO year-week calendar. In most cases, yyyy and YYYY yield the same number, however they may be

Java开发手册中的DO、DTO、BO、AO、VO、POJO定义

倖福魔咒の 提交于 2019-12-30 10:53:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 分层领域模型规约: DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。 DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。 BO( Business Object):业务对象。 由Service层输出的封装业务逻辑的对象。 AO( Application Object):应用对象。 在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。 VO( View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。 POJO( Plain Ordinary Java Object):在本手册中, POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。 Query:数据查询对象,各层接收上层的查询请求。 注意超过2个参数的查询封装,禁止使用Map类来传输。 领域模型命名规约: 数据对象:xxxDO,xxx即为数据表名。 数据传输对象:xxxDTO,xxx为业务领域相关的名称。 展示对象:xxxVO,xxx一般为网页名称。 POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。 来源: oschina 链接: