
C++11
GmEcho
这个作者很懒,什么都没留下…
展开
-
c++回调函数
在项目中看到回调函数,总结一下:回调函数的几个条件:定义一个指向函数的指针声明被回调函数调用回调函数的宿主函数本例子将回调函数注册到一个map中,在消息类触发的服务器应用中常见,比如游戏服务器话不多说:直接上代码版本1:定义一个指向函数的指针CallBack.h#ifndef __CALLBACK_H__#define __CALLBACK_H__#include <iostream>#include <map>#include <string&原创 2020-05-08 21:00:03 · 832 阅读 · 0 评论 -
C++不定参数打印调试日志或写入文件
主要用到c语言的_va_args__宏参考:http://www.cplusplus.com/reference/cstdarg/va_list/#ifndef __LOGGER_H#define __LOGGER_H#include <stdio.h>#include <stdarg.h>#include <stdlib.h>#include ...原创 2020-04-03 17:22:38 · 699 阅读 · 0 评论 -
C++多态调用实现原理(虚函数表详解)
转载 https://blog.youkuaiyun.com/shanghx_123/article/details/82973791转载 2020-04-03 09:50:13 · 179 阅读 · 0 评论 -
Effective C++ 随笔 1
最近在看Effective C++,结合自己的工作实践做点笔记,一来方便自己日后查看,二来鞭策自己不断学习。1.为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符class String{ public: String(const String&amp;amp;); //拷贝构造函数 String&amp;amp; operator=(const Strin...原创 2019-01-26 16:34:12 · 215 阅读 · 0 评论 -
Effective C++ 随笔 2
原创 2019-01-26 22:24:42 · 169 阅读 · 0 评论 -
C++ 静态成员的使用
C++中的静态成员(静态成员函数和静态数据成员)属于类所有,不属于类的对象,与普通的成员相比,静态成员无this指针。1.静态数据成员class A{ public: static void print() { cout << "x="<<x << endl; //通过公有成员函数访问私有静态数据成员 } stat...原创 2019-02-14 17:07:45 · 5134 阅读 · 4 评论 -
拷贝构造函数与移动构造函数
左值与右值的区别左值持久,右值短暂(右值要么是字面值常量,要么是表达式求值过程中创建的临时变量)左值是变量,右值不能被赋值左值引用与右值引用右值引用是为了支持移动操作,通过&&来获得右值引用左值引用是相对于右值引用的,通过&来获得int i = 42;int &r = i; //正确,r引用iint &&rr = ...原创 2019-04-11 21:09:33 · 9121 阅读 · 0 评论 -
C++中利用迭代器删除元素
转自:https://blog.youkuaiyun.com/yf_li123/article/details/75003425#comments(1)对于关联容器(如map,set,multimap,multiset),删除当前的iterator,仅仅会使当前的iterator失效,只要在erase时,递增当前的iterator即可。这是因为map之类的容器,使用了红黑树来实现,插入,删除一个结点不会对其...转载 2019-04-22 18:09:14 · 4900 阅读 · 2 评论 -
c++98到c++11成员变量初始化的变化
c++98允许在类中使用“=”对静态常成员变量初始化c++11支持在类中对非静态成员变量进行初始化,但只支持“=”,不支持"()"两者都不支持对静态非常成员变量的初始化 9 #include <iostream> 10 #include <string> 11 12 class Init 13 { 14 public: 15 void...原创 2019-04-28 17:54:47 · 871 阅读 · 0 评论 -
常量指针与指针常量
理解常量指针与指针常量constant*前面的是对被指向对象的修饰,*后面的是对指针本身的修饰常量指针(被指向的对象是常量)定义:又叫常指针,可以理解为常量的指针,指向的是个常量关键点:常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值;指针还可以指向别处,因为指针...转载 2019-05-23 10:09:55 · 198 阅读 · 0 评论 -
define中的特殊符号\,#,##的作用
1. 符号"\"用于多行定义,每行的最后加上"\"#define MAX(a,b) \ if(a>b)\ return a;\ else\ return b;2.符号"#“和”##"#是把参数字符串化, ##是连接两个参数#include <iostream>using namesapce std;#define A(x) x#def...原创 2019-01-20 16:55:12 · 4481 阅读 · 1 评论 -
C++ explict关键字
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的类声明, 即...转载 2019-01-09 15:17:02 · 390 阅读 · 0 评论 -
auto使用
C++11引入了类型说明符auto,它给我们带来了方便,但有时也会因为使用不当而造成错误。说明:auto只能用于识别类型。如int,string,类类型等auto不能代替引用&amp;amp;总结:所以函数的返回值带引用时,用auto时也必须带上&amp;amp;,不然会出错...原创 2019-01-24 12:35:32 · 408 阅读 · 1 评论 -
C++11 bind函数
bind函数的使用详解可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。调用bind的一般形式:auto newCallable = bind(callable,arg_list);`其中,newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参数。即,当我们调用n......原创 2018-10-23 16:34:06 · 18892 阅读 · 5 评论 -
C++中一个类成员函数调用另一个类成员的方法
在C++中一个类成员函数调用另一个类成员的方法主要有:类的组合,友元类,单例模式等,下面主要讲讲这三种方法的实现方法1:利用类的组合组合通俗来讲就是类B有类A的属性,如声明一个Person类,再声明一个Teacher类,Person类对象有年龄和姓名成员,而Teacher类对象成员也有年龄和姓名属性,所以我们可以将类Person的对象作为类Teacher的成员变量,那么就实现了Teacher类...原创 2018-10-31 23:13:01 · 80152 阅读 · 5 评论 -
C++字符串分割
字符串分割在学习C语言时,分割字符串主要使用strtok()库函数;然而在学习C++之后,发现string类中没有strtok这个成员函数了,但有6个字符串搜索函数,这样可以利用搜索函数完成字符串分割。string搜索操作:函数名解释s.find(args)查找s中第一次出现args的位置s.rfind(args)查找s中最后一次出现args的位置s.fi...原创 2018-11-04 12:22:23 · 10383 阅读 · 1 评论 -
C++ 随机抽奖
随机抽奖实现各个奖项都有不同的权重,比如一等奖的权重为10,二等奖的权重为30,三等奖的权重为60等。总的权重没必要加起来等于100。代码实现如下:#include&lt;iostream&gt;#include&lt;map&gt;#include&lt;ctime&gt;#include&lt;cstdlib&gt;using namespace std原创 2018-11-05 23:16:16 · 4924 阅读 · 0 评论 -
C++ 模板函数与类模板
1.函数模板函数模板提供了一种函数行为,该函数行为可以用多种不同的类型进行调用,也即是说,函数模板代表一个函数家族。#include&amp;lt;iostream&amp;gt;template&amp;lt;typename T&amp;gt;T max(T const&amp;amp; a, T const&amp;amp; b){ return a&amp;lt原创 2019-04-17 16:58:26 · 340 阅读 · 0 评论 -
C++ 缺省模板参数与模板的模板参数
1.缺省模板参数stack.hpp文件#pragma once#include <vector>#include <stdexcept>template <typename T, typename CONT = std::vector<T> >class Stack {private: CONT elems; ...原创 2018-11-19 21:33:27 · 3031 阅读 · 0 评论 -
C++ 类模板的特化与局部特化
1.类模板的特化特化模板就是通过模板实参来特化类模板,通过特化类模板,可以优化基于某种特定类型的实现。另外,如果要特化一个类模板,你还要特化该类模板的所有成员函数,如果只是特化某个成员函数,也就没有特化整个模板类。为了特化一个类模板,你必须在起始处声明一个template&amp;amp;lt;&amp;amp;gt;,用来特化类模板。template&amp;amp;lt;&amp;amp;gt; class Stack&原创 2018-11-24 16:01:03 · 1408 阅读 · 0 评论 -
C++ 函数模板的全局特化与局部特化
1.函数模板的全局特化函数模板的全局特化和类模板的全局特化类似,以template<>开头。template<>int f(int){ return 2;}另外,函数模板的全局特化不能包含缺省的实参值,而函数模板可以包含缺省的实参值。template<typename T>int f(T ,T x=42){ return x;}...原创 2018-11-30 21:38:32 · 1378 阅读 · 0 评论 -
智能指针
相对于new,智能指针可以自动释放申请的堆空间;C++11提供了两种智能指针类型来管理动态对象。一种是shared_ptr,它允许多个指针指向同一对象;另一种是unique_ptr,它则独占所指向的对象。1.shared_ptr类创建一个可以指向T型对象的智能指针: shared_ptr < T > p;默认初始化的智能指针中保存着一个空指针。1)shared_ptr的独有操作...原创 2019-01-03 18:25:44 · 154 阅读 · 0 评论 -
C++11 function类模板
std::function1. std::function 简介类模板std :: function是一个通用的多态函数包装器。 std :: function的实例可以存储,复制和调用任何可调用的目标 :包括函数,lambda表达式,绑定表达式或其他函数对象,以及指向成员函数和指向数据成员的指针。当std::function对象未包裹任何实际的可调用元素,调用该std::function对...原创 2018-10-21 02:14:49 · 33895 阅读 · 11 评论