• 摘要视图
  • 目录视图

CAS 的跨平台实现方案 以及 基于CAS 的无锁多线程安全日志类

CAS

CAS, compare-and-swap, 原子的比较和设置变量值。

#include <stdio.h>

#if defined(__linux__) || defined(__unix__)
    #define CAS32(ptr, val_old, val_new[......]

>> 阅读全文...

类对象数组的初始化与赋值(易错点)

下述代码中声明类Example对象的数组e[2],然后新建了Example(1)对象并赋值给e[0]。通过这种方式设置类对象数组,称为赋值,而不是初始化。

这个过程实际上赋值过程,存在临时对象Example(1)的构造和析构。而通过类对象数组初始化就不存在生成临时对象这一过程。先看类对象数组声明和赋[……]

>> 阅读全文…

C++实现通过基类指针调用子类的私有函数(易错点)

请看下面的例子,它成功调用了类的私有成员函数。

[cpp]//鸟,可以飞
class Bird {
public:
virtual void fly(){cout<<"Bird fly"<<endl;};
};

//鸵鸟,是鸟,但不可[……]

>> 阅读全文…

C++中public,protected,private访问(转)

注:本想自己写一点笔记,但是发现了下面这篇文章已经总结的很好,就转过来了珍藏吧。

转自: 网易博客 – 好记性不如烂笔头—Leo – C++中public,protected,private访问

————————————————[……]

>> 阅读全文…

绕中心点顺序旋转的n*n数组

问题

给定一个n,n为奇数,求一个n*n的二维数组,1 位于数组的中心,其它数绕中心点依次旋转并递增,如n=5时,数组如下:

21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13

思路

示意图.jpg[……]

>> 阅读全文…

沿45°递增的n*n数组

问题

给定一个n,求一个n*n的二维数组,该数组的值沿45°方向的斜线依次递增。如n=4时,数组为

  1   2   4   7
  3   5   8  11
  6   9  12  14
 10  13  15  16

思路

将数组分成上三角(包括对角线)和下对角两个部分分别计[……]

>> 阅读全文…

C++计时的几种方法总结及例程

程序中经常会用到计时,下面总结了常见的几种计时方法,包括clock()、time()、GetTickCount()、QueryFrequencyCount(),使用的方法大致一致,符合下面的规范。通过在代码开始和结束处分别获得某个计数值,计算(计数值差值/计数的频率)获得代码的执行时间。

start[......]

>> 阅读全文...

C++线程同步总结(笔记)

主要有四种方式:临界区(CRITICAL_SECTION)、互斥对象(Mutex,Mutual Exclusion)、事件对象(Event)、信号量(Semaphore)

其中临界区效率最高,但只能实现本进程内的线程同步。其它三个可以实现多个进程内的线程同步。信号量功能最强大可实现线程互斥也可以用[……]

>> 阅读全文…

C\C++标准及各编译器的支持情况

C语言关键字(32+)

基本的有32个保留关键字(Reserved Keywords),后续的C99和C11标准又增添了一些关键字。

32个保留关键字(C89)

char short int unsigned
long float double struct
union void enum signed
const volatile typedef auto
register static extern break
case continue default do
else for goto if
return switch while sizeof

注意: sizeof是关键字,而不是函数或者宏

C99标准新增关键字

_Bool _Complex _Imaginary inline restrict

_Bool与C++中的bool类型相同,值为0或1,定义在<stdbool.h>中

_Complex和_Imaginary用于定义复数类型。

inline与C++中的inline相同,内联支持。

restrict用于修饰指针。

C11标准新增关键字

_Alignas _Alignof _Atomic _Generic
_Noreturn _Static_assert _Thread_local

主要来源:维基百科“C语言”

[……]

>> 阅读全文…

MFC递归复制文件夹

上一篇中使用CFileFind实现了递归删除文件夹。这一篇继续使用CFileFind类实现文件夹的复制。

文件title\name\path的区分

开始之前,先讲一下文件最常用的三个属性title、name、path的区分。比如如下代码

CFile file("C:/note/file.t[......]

>> 阅读全文...

MFC递归删除文件夹

最近在看MFC 的文件操作,从网上淘了一本比较讲MFC文件操作比较全的电子书,然后开始试手。在删除文件夹时,遇到了问题,通过查看MSDN和网友的论坛留言,自己总算是解决了这个问题,现在与大家共享。

MFC中提供了删除文件夹的一个封装函数 RemoveDirectory()

BOOL WINAPI R[......]

>> 阅读全文...