- 博客(93)
- 收藏
- 关注
转载 python 引发异常 raise()及异常处理
raise()用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。抛出异常和自定义异常Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。raise-语句Python中的raise ...
2019-05-10 12:25:33
7385
转载 python import引入不同路径下的模块
python 包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。下面将具体介绍几种常用情况:(1)主程序与模块程序在同一目录下:如下面程序结构:– src |-- mod1.py |-- test1.py若在程序test1.py中导入模块mod1, 则直接使用 import mod1或from mod1 import *;(2)主程序所在目录是...
2019-05-09 16:44:17
1045
转载 python----装饰器
装饰器@的作用是调用下一行的变量作为函数的参数:def funcA(A): print("function A") print(A) def funcB(B): print(B(2)) print("function B") @funcA@funcBdef func(c): print("function C") return c**2...
2019-05-08 15:22:27
231
转载 cocos2d-x 3.17:创建项目
在下载安装好了cocos2d-x之后,首先我们要编辑一下环境变量PATH,添加以下值:D:\cocos2d-x-3.17.1\tools\cocos2d-console\binD:\cocos2d-x-3.17.1\templates打开终端,执行以下命令:cocos new Button -p com.netease.Button -l cpp -d e:/cocoscocos ...
2019-05-07 15:02:42
1118
转载 COCOS2D-X锚点的理解
anchor point 究竟是怎么回事? 之所以造成不容易理解的是因为我们平时看待一个图片是 以图片的中心点 这一个维度来决定图片的位置的。而在cocos2d中决定一个 图片的位置是由两个维度 一个是 position 另外一个是anchor point。只要我们搞清楚他们的关系,自然就迎刃而解。默认情况下,anchor point在图片的中心位置(0.5, 0.5),取值在0到1之间的好处...
2019-05-06 17:13:08
250
转载 Visual Studio 2017 安装Windows SDK10.0.17134.0 失败的解决办法
当我们安装成功了VS2017时,当我们要编译我们的代码时,我们会发现出错了:找不到Windows SDK 10.0.17134.0这时,我们需要安装SDK,下载地址为:https://developer.microsoft.com/zh-cn/windows/downloads/windows-10-sdk下载至默认路径即可,安装成功后,打开Visual Studio Installer,它会...
2019-05-06 15:51:26
3166
转载 如何在win10上同时安装python2和python3
现在我的电脑上安装了python2.7和python3。如果我想同时使用这两个版本的python,我该怎么做呢?首先,找到python2和python3的安装目录,把python和pythonw分别改成python2,pythonw2,还有python3,pythonw3,然后再去cmd里输命令,我们会发现:但是,我们现在如果使用pip是会报错的,因为我们把python名字都改了,那怎么办呢...
2019-05-06 15:06:08
310
转载 函数返回值作为左值问题
C++语言的函数返回值类型可以分为内部类型和自定义类型两大类。如果函数返回内部类型并且希望返回值可以作为左值(即可以放在赋值操作符左边的),那就必须返回引用类型。而在函数返回自定义类型(即返回类类型)中根据是否可作为左值,返回值是否可调用成员函数的不同可分为以下四种情况。T f(): 返回一般的类类型,返回的类类型不能作为左值,但返回的类类型可以直接调用成员函数来修改,如function(...
2019-05-05 20:45:55
7432
3
转载 C++:函数返回值与临时变量
C++规定当函数返回的是非引用类型时,函数会创建临时对象(temporary object),函数返回的就是这个临时对象。在求解表达式时,如果需要一个地方存储其运算结果,编译器会创建一个没有命名的对象,这就是临时对象。浅显的说,当你调用了函数,函数会 return一个值 那么这个值总得有存放的地方吧,编译器就把会把值存放在一个没有命名法临时对象中。我们举个例子来说明一下,首先定义一个类:cl...
2019-05-05 20:28:13
7779
3
转载 go addressable 详解
Go语言规范中规定了可寻址(addressable)对象的定义:For an operand x of type T, the address operation &x generates a pointer of type *T to x. The operand must be addressable, that is, either a variable, pointer ind...
2019-05-01 20:36:05
906
转载 C++反射机制的实现
转载于: https://blog.csdn.net/Scythe666/article/details/51718864Java中有天然的反射机制,因为Java本身就是半编译语言,很多东西可以在运行时来做,但是c++就不同了。要建立c++的反射机制,就需要登记每个类名与 创建类实例的回调函数 的对应关系。前言首先抛出一个问题:如何通过类的名称字符串来生成类的对象。比如有一个类ClassA,...
2019-04-30 17:59:15
33678
5
转载 Go语言:flag包使用详解(一)
转载于文章Golang flag包使用详解(一),Go语言官方教程的地址为:https://golang.org/pkg/flag/#pkg-overview概述flag包提供了一系列解析命令行参数的功能接口命令行语法命令行语法主要有以下几种形式-flag //只支持bool类型-flag=x-flag x //只支持非bool类型以上语法对于一个或两个‘-’号,效果是一样的,但...
2019-04-26 11:16:47
4131
1
转载 printf()格式化输出详解
% - 0 m.n l或h 格式字符%:表示格式说明的起始符号,不可缺少。-: 有-表示左对齐输出,如省略表示右对齐输出。0:有0表示指定空位填0,如省略表示指定空位不填。m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。l或h:l对整型指long型,对实型指double型。h用于将整型...
2019-04-25 10:17:50
14222
原创 GO语言工具下载的相关问题及解决办法
在为Go语言配置工具时,我们经常会碰到一些工具无法下载的问题,如下载工具golint和gorename时:这些问题有些是因为墙的原因导致的,我们的解决办法是,从Github下载相关工具的源码,并将源码复制到目录$GOPATH/src/golang.org/x下,GOPATH变量就是我们设置的Go的工作目录。比方说,我们要下载工具lint,其Github的地址为: https://github...
2019-04-24 22:21:53
264
原创 Go语言格式化输出
Go语言字符串格式化常用的verb为:表:字符串格式化时常用动词及功能动 词功 能%v按值的本来值输出%+v在 %v 基础上,对结构体字段名和值进行展开%#v输出 Go 语言语法格式的值%T输出 Go 语言语法格式的类型和值%%输出 % 本体%b整型以二进制方式显示...
2019-04-24 10:16:38
3289
原创 Ubuntu上安装go
Ubuntu上安装go方法一go工具的下载地址为https://golang.org/dl/,下载文件名类似为go1.12.4.linux-amd64.tar.gz的文件,然后在命令行下运行命令:sudo tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz上面的命令将go安装到目录/usr/local/go下,goVERSION.VERS...
2019-04-22 20:46:11
291
原创 C++ 11新特性:枚举类型
枚举类型属于字面值常量类型,用于将一组整型常量组织在一起,每个枚举类型定义了一种新的类型。C++包含两种枚举:限定作用域的和不限定作用域的。定义限定作用域的枚举类型的一般形式是:enum calss(或 enum struct)枚举类型名 {..., ...};定义不限定作用域的枚举类型时省略掉关键字class(或 struct)。如果enum是未命名的,则我们只能在定义该enum时定义它...
2019-04-21 22:43:46
2535
原创 C++ 11 新特性:随机数库
在C++11之前,C和C++都依赖于函数rand来生成随机数。此函数生成均匀分布的伪随机整数,每个随机数的范围在0和一个系统相关的最大值(至少为32767)之间。rand函数有一些问题:很多程序需要不同范围的随机数,一些应用需要非均匀分布的数。而程序员为了解决这些问题而试图转换rand生成的随机数的范围、类型或分布时,常常会引入非随机性。定义在头文件random中的随机数库通过一组协作的类来解...
2019-04-21 12:09:55
1420
原创 C++ 11 新特性:override和final指示符
虚函数的override和final指示符派生类如果定义了一个函数与基类中虚函数的名字相同但是形参列表不同,这仍然是合法的行为。编译器将认为新定义的这个函数与基类中原有的函数是相互独立的,这时派生类的函数并没有覆盖掉基类中的版本。但这种声明往往意味着发生了错误,因为我们原本可能希望派生类能覆盖掉基类中的虚函数,但是不小心把形参列表弄错了。我们可以在派生类的虚函数使用override关键字,显式...
2019-04-20 22:33:55
315
原创 C++ 11 新特性:可调用对象与function
可调用对象C++ 中有几种可调用的对象:函数、函数指针、lambda表达式、重载了函数调用运算符的函数对象类以及bind创建的对象(可以将bind函数看作一个通用的函数适配器,这接受一个可调用对象,生成一个新的可调用对象来”适应“原对象的函数列表)。//普通函数int add(int i, int j) { return i + j; }//lambda,产生一个未命名的函数对象类aut...
2019-04-20 22:14:25
380
原创 C++ 11 新特性:标准库move函数
标准库move函数我们可以通过调用std::move函数来获得绑定到左值上的右值引用,此函数定义在头文件<utility>中。std :: move用于指示对象obj可以“移动”,即允许资源从obj到另一个对象的有效传输。注意,对move我们不应该使用using声明,而是应该直接调用std::move而不是move,以避免名字冲突。int && rr3 = std:...
2019-04-20 21:47:36
5837
原创 C++ 11 新特性:容器的非成员函数swap
除aary外,交换两个容器内容的操作保证会很快------元素本身并未被交换,swap只是交换了两个容器的内部数据结构。元素不会被移动的事实意味着,除string外,指向窗口的迭代器、引用和指针在swap操作之后都不会失效。它们仍指向swap操作之前所指向的那些元素,只是这些元素已经属于不同的容器了。与其它容器不同,对一个string调用swap会导致迭代器、引用和指针失效。swap两个arra...
2019-04-18 21:49:13
784
原创 C++ 11 新特性: std::array和std::forward_list
std::arraystd::array是C++11新增加的类型。与内置数组相比,array是一种更安全、更容易使用的数据类型,定义于头文件<array>中。与内置数组类似,array对象的大小是固定的,因此,array不支持添加和删除元素以及改变窗口大小的操作。而且它不会退化成指针。从cppreference.com得知其定义为:template< class ...
2019-04-18 21:26:09
1140
原创 C++ 11 新特性:可变形参
为了编写能够处理不同数量形参的函数,C++11提供了两种主要的方法:如果所有形参的类型相同,可以传递一个名为initializer_list的标准库类型如果形参的类型不同,可以使用可变参数模板C++还有一种特殊的形参类型:省略符,可以用它传递可变数量的实参。不过需要注意的是,这种功能一般只用于与C函数交互的接口程序。initializer_list形参如果函数的形参数量未知但全部形参...
2019-04-18 11:51:49
1394
1
原创 C++ :引用折叠和显式模板实参
为了理解引用折叠,我们给出下面的例子:template <typename T> void f(T&&);f(i);假定 i 是一个 int 对象,我们可能认为 f(i) 这样的调用是不合法的。毕竟,i 是一个左值,而通常我们不能将一个右值引用绑定到一个左值上。但是,C++在正常绑定规则之外定义了两个例外规则,允许这种绑定。第一个例外规则:当我们将一个左值传...
2019-04-18 10:40:31
282
原创 C++ 11 新特性: 标准库函数begin和end、sizeof运算符
标准库函数begin和end为了让指针的使用更简单,更安全,C++11引入了两个函数:begin和end,这两个函数定义在iterator头文件中。它们的正确使用形式是将数组作为它们的参数:int ia[] = {0,1,2,3,4,5,6,7,8,9};int *beg = begin(ia); //指向ia首元素的指针int *end = end(ia); //指向ia尾元素的下...
2019-04-17 16:05:01
490
原创 C++ 11 新特性: auto和decltype
auto类型说明符C++11 新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。使用auto也能在一条语句中声明多个变量。因为一条声明语句只能有一个基本数据类型,所以该语句所有变量的初始基本数据类型都必须一样:auto sz = 0, pi = 3.14; //错误:sz和pi的类型不一致由于上面的语句,推导出变量的类型可能为int或double,因此编译器...
2019-04-17 10:45:40
152
原创 C++ 11 新特性: constexpr变量和constexpr函数
constexpr变量字面值类型包括算术类型、引用、指针、枚举和数据成员都是字面值类型的聚合类。聚合类的定义:所有成员都是public的。没有定义任何构造函数。没有类内初始值。没有基类,也没有虚函数。如:struct Data { int ival; string str;};常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。字面值属于常量表达式,用常量...
2019-04-16 17:07:46
9946
转载 Linux调试分析诊断利器——strace
转载https://www.cnblogs.com/clover-toeic/p/3738156.htmlstrace是个功能强大的Linux调试分析诊断工具,可用于跟踪程序执行时进程系统调用(system call)和所接收的信号,尤其是针对源码不可读或源码无法再编译的程序。在Linux系统中,用户程序运行在一个沙箱(sandbox)里,用户进程不能直接访问计算机硬件设备。当进程需要访问硬件...
2019-04-16 11:27:25
146
原创 muduo中实现Protobuf编解码器codec与消息分发器dispatcher
前言Google Protocol Buffers(简称Protobuf)是一款非常优秀的库,它定义了一种紧凑(相对XML和JSON而言)的可扩展二进制消息格式,特别适合网络数据传输。在网络编程中使用Protobuf需要解决以下两个问题:长度。Protobuf打包的数据没有自带长度信息或终结符,需要由应用程序自已在发生和接收的时候做正确的切分。类型。Protobuf打包的数据没有自带类型...
2019-04-15 22:05:41
980
原创 变量的内存释放顺序
局部变量的释放先于全局变量和静态变量。而局部变量之间,静态变量之间,全局变量之间的以及静态变量与全局变量之间的内存释放顺序依然遵循后声明先释放的次序...
2019-04-12 20:03:05
783
转载 C++中string、char *、char[]的转换
本文转载于https://www.cnblogs.com/Pillar/p/4206452.html一、string转char*主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy();1. data()方法string str = "hello";const char* p = str.data();//加const 或者用char * p...
2019-04-12 20:00:53
246
原创 关于C++“字符指针”的初始化
使用strcpy函数#include <stdio.h>#include<string.h>int len(char*a) { printf("%s\n", a); return strlen(a);}int main(){ char*t[4]; char a[4]; const char*c = "asd"; s...
2019-04-12 19:53:00
2086
转载 C++宏(Macro)的各种玩法
本文转载于http://orzz.org/cxx-macro-play/一、普通玩法1. 基本功能定义一个宏来替换字符串:#define MACRO_PRINTF printf这样我们使用MACRO_PRINTF就如同printf一样。我们还可以像这样定义一个宏名称,但不写任何东西:#define MACRO_NAME然后像这样通过预定义的开关来调整代码实现:#ifdef ...
2019-04-12 19:50:45
9118
转载 为什么TCP连接的建立是需要三次,而断开却需要四次
转载,原文地址https://blog.csdn.net/MakeContral/article/details/77531936TCP的为什么三次握手就可以建立连接:我先抛出一个命题,两个人想要正常沟通,至少保证双方都知道自己和对方的发送和接受功能是正常的。假设这里有两个人,server和client。现在client需要和server建立连接。① client->server :...
2019-04-12 19:32:52
1212
1
原创 Linux和Windows间进程通信方式
Linux进程间通信:管道(匿名与命名)、信号、消息队列、共享内存、信号量、套接字(socket)Linux线程间通信:互斥量(mutex),信号量,条件变量Windows进程间通信:管道(匿名与命名)、消息队列、共享内存、信号量 、套接字(socket)、剪贴板Windows线程间通信:互斥量(mutex),信号量(semaphore)、消息(Message)、事件(event)...
2019-04-12 19:28:19
292
原创 生产者消费者问题
问题描述:缓冲区大小为N,生产者产生物品放到缓冲区,消费者将物品从缓冲区移走互斥关系:对缓冲区得访问需要互斥,包括生产者和生产者之间、消费者和消费者之间、生产者和消费者之间。同步关系:当缓冲区满时生产者进程需要等待,当缓冲区空时消费者进程需要等待。解题思路:用信号量解决生产者消费者问题。互斥:有界缓冲区是一个临界资源,对临界资源得访问需要设置一个信号量mutex同步:设置两个同步信号量...
2019-04-12 19:27:28
621
原创 C++实现LRU(最久未使用)缓存算法
LRU缓存算法也叫LRU页面置换算法,是一种经典常用的页面置换算法。LRU的典型实现是hash map + doubly linked list,双向链表用于存储数据结点,并且它是按照结点最近被使用的时间来存储的。如果一个结点被访问了,我们相信它在接下来的一段时间被访问的概率要大于其它结点。于是,我们把它放到双向链表的头部。当我们往双向链表里插入一个结点,我们也有可能很快就会使用到它,同样把它插...
2019-04-12 19:23:49
229
原创 Protobuf C++ API 简介
descriptor.h#include <google/protobuf/descriptor.h>namespace google::protobuf这个文件包含了描述protocol message类型信息的类。关键类有:Descriptor:描述protocol message的类型信息FieldDescriptor:描述message的某个字段Descrip...
2019-04-12 09:45:37
4470
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人