
C/C++
月凉西厢
穷且益坚,不坠青云之志
展开
-
c++经典好书
初级:C++ Primer:比较经典,讲到C++语言差不多所有内容C++编程思想(Thinking in C++) :关于OO中级:Effective C++:覆盖了50多个条款,讲了一些你可能没有考虑过的C++规则。More Effective C++:上一本的续集Effective STL:类似Effective C++,主要面向于STL。这3本是姐妹书。Exc转载 2015-08-25 09:18:41 · 552 阅读 · 0 评论 -
c++类成员函数作回调
C++类的成员函数作回调函数,主要分三种情况:1,类的static函数,由于此类函数属于类而非类的实例,不存在this指针的概念,因此可以直接取其函数地址作为回调;2,类的普通成员函数,这类函数在实现上存在着隐含的this指针,因此作为回调必须指明是哪一个类实例的函数。3,类的virtual函数,由于存在多态,如果将其作为回调函数,其逻辑上可能会比较复杂,个人觉得应该尽量避免。以下是C++...原创 2018-12-17 14:52:04 · 4391 阅读 · 1 评论 -
C++纯虚函数定义
看代码时时无意看到代码里某类的纯虚函数居然有实现,吓我一跳,果真学无止境啊!在此转载相关文章一篇,以便遗忘:https://blog.youkuaiyun.com/happymawolf/article/details/6369585今天,我读到《effective c++》的第34条款,里面竟然提到纯虚函数也是可以定义的,大吃一惊,赶快打开vs2005,自己编写了一段代码,编译运行,发现竟然真的可以!...转载 2018-10-11 14:15:02 · 5998 阅读 · 6 评论 -
C/C++11 const
    关于const,在前面关于《C/C++程序内存分布》已经又提到过。但是,这里一定要指出的是现在的C++的const实现和C的const是不一样的。     比如对于如下的程序,以下程序对于C语言来说是不合法的,但是对于C++却毫无问题。#include <stdio.原创 2018-09-05 17:02:41 · 473 阅读 · 0 评论 -
C/C++程序内存分布
1,主要段及其分布    每个程序运行起来以后,它将拥有自己独立的虚拟地址空间。这个虚拟地址空间的大小与操作系统的位数有关系。例如32位硬件平台的虚拟地址空间的地址可以从0~2^32-1,即0x00000000~0xFFFFFFFF,总共4GB大小。在32位Windows操作系统中,高地址的2GB位内核空间,用户空间只有2GB,而32位Linux的内核空...原创 2018-09-05 16:56:19 · 6070 阅读 · 1 评论 -
C++智能指针
    C/C++中的堆内存的释放是由程序员自己控制的,但是在某些时候,这些内存的释放时机无法被准确或难以判断出来。智能指针此时应运而生。事实上,有些时候堆内存的释放即使可以被准确判断出来,但是由于编码上的困难或繁琐,也会采用智能指针。1,C++智能指针的实现原理(简)    C++ 的智能指针原创 2018-08-30 15:13:27 · 779 阅读 · 0 评论 -
C++重载+运算符
C++重载运算符由两种方法: 1,直接将运算符函数重载为类内成员函数 2,将运算符函数重载为类的友元函数 以下为operator+的运算符函数,并且两种方法都可以实现连+;#include "stdafx.h"#include <iostream>#include <string>using namespace std;class Op{publi...原创 2018-08-21 16:04:43 · 656 阅读 · 0 评论 -
C++右值引用
class A{public: A() { std::cout &lt;&lt; "Constructor" &lt;&lt; std::endl; } A(const A&amp; src) { std::cout &lt;&lt; "Copy Constructo原创 2018-08-23 11:46:35 · 466 阅读 · 0 评论 -
C++返回对象
C/C++函数在返回值类型的尺寸太大时,在函数返回时会使用一个临时的栈上内存区域作为中转。结果返回值对象会被拷贝两次!其具体的返回实现在不同编译器下的实现时不一样的。 因此,在C++中返回对象的时候,对象需要经过2次拷贝构造函数的调用才能够完成返回对象的传递。一次拷贝到栈上的临时对象里,另一次把临时对象拷贝到存储返回值的对象里。在某些编译器里,返回一个对象甚至需要经过更多的步骤。 因此,尽量不...原创 2018-08-17 14:29:26 · 2072 阅读 · 0 评论 -
DLL 导出类时DLL HELL错误及其解决方案
DLL除了可以导出函数之外,还可以导出类。 然而,导出类的DLL在维护和修改时有很多地方必需很小心,增加成员变量、修改导出类的基类等操作都可能导致意想不到的后果。当用户更新了最新版本的DLL库后,应用程序可能再也不能工作了。这就是DLL Hell问题。 如导出如下类Class A{public: int get_a();private: int a;}当需要再新...原创 2018-08-17 10:33:41 · 543 阅读 · 0 评论 -
C++11 lambda 表达式解析
截取自:https://www.cnblogs.com/haippy/archive/2013/05/31/3111560.html C++11 的 lambda 表达式规范如下: [ capture ] ( params ) mutable exception attribute -&amp;gt; ret { body } (1) [ capture ] ( params ) -&amp;gt; re...转载 2018-08-14 16:19:26 · 293 阅读 · 0 评论 -
C/C++单例模式
非线程安全单例:线程安全单例: 1,懒汉式class Singleton{public: static Singleton* getInstance();private: Singleton(); //把复制构造函数和=操作符也设为私有,防止被复制 Singleton(const Singleton&amp;amp;); Singleton&amp;amp; ...原创 2018-08-14 14:41:46 · 4502 阅读 · 2 评论 -
dll内获取自身路径的方法(windows)
include <windows.h> bool GetSelfModulePath(char* path){ MEMORY_BASIC_INFORMATION mbi; HMODULE dllHandle = ((::VirtualQuery(GetSelfModulePath, &mbi, sizeof(mbi)) != 0) ? (HMODULE)...原创 2018-04-19 10:47:30 · 2079 阅读 · 0 评论 -
c文件操作
转载:http://www.cnblogs.com/duzouzhe/archive/2009/10/24/1589348.html文件的基本概念 所谓“文件”是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内转载 2015-09-18 16:33:50 · 715 阅读 · 0 评论 -
vs2015中以静态库链接ZeroMQ
windows下编译zeromq会出现两种类型的Lib:一个是动态链接时所要用的lib,因为不包含源码,因此很小,使用的时候需要将对应的dll放到与exe同级的目录下;另一个是静态库,包含源码,因此比较大,编译后不需要依赖dll。这两个库的名字目前(20190708)如下:1,libzmq-v140-mt-gd-4_3_2.lib (动态)2,libzmq-v140-mt-sgd-4_3...原创 2019-07-08 17:44:59 · 1228 阅读 · 0 评论