看日出,等月落……

太阳缓缓的滑上地平线,再一次接替了月的工作。身影,拉的好长好长,华丽的炫盖了整片天空。
我静静坐于海边,却没有想要说出口的,就想静静的待着,那么静的待着。
总把要微笑挂在嘴边,却只会在海边勾起嘴角,默默浅笑。蔚蓝的天空下,全是一种宁静柔和,没有一丝尘的渲染,没有一处墨的污点。
虚着眼,看着海面,思想似乎飘的好远好远,飘在了哪?那不知名的角落。海面上,泛起了阵阵涟漪,将我唤回这里。看着那波光粼粼,突然间,竟觉得有些刺眼。
不带任何表情,慵懒的躺在沙滩上,缓缓闭起了眼。闲逸的沐浴着阳光,心里却微微有些苦涩,连自己也弄不清的苦涩。
不再想其他,把我的思想交给风儿,就让我的思想随风而散吧。静了,静了,静的似乎整个世界只剩下我,没有任何喧闹,或许说,是我太沉寂于自己的思维中,不想听见。我沉沉的入睡了。
等我醒来是,月亮早已升起。和太阳不同,皓月微光是静柔的,却又有些相同,都是那样没有瑕疵,没有墨点,静的那样坚不可摧。
斜眼看着海面,等待着太阳再一轮升起,再一轮落下。
也许,在未来的某一天,我会那么的怀念,怀念现在无忧无虑的看海。
现在,我只想静静坐在海边,看日出,等月落……

详解link

有些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错误信息不能定位到某一行)。或者对语言的一些部分不知道为什么要(或者不要)这样那样设计。了解本文之后,或许会有一些答案。
首先看看我们是如何写一个程序的。如果你在使用某种IDE(Visual Studio,Elicpse,Dev C++等),你可能不会发现程序是如何组织起来的(很多人因此而反对初学者使用IDE)。因为使用IDE,你所做的事情,就是在一个项目里新建一系列的.cpp和.h文件,编写好之后在菜单里点击“编译”,就万事大吉了。但其实以前,程序员写程序不是这样的。他们首先要打开一个编辑器,像编写文本文件一样的写好代码,然后在命令行下敲
cc 1.cpp -o 1.o
cc 2.cpp -o 2.o
cc 3.cpp -o 3.o

图片的宽度对齐问题:Beware : Windows Bitmaps have to have a DWORD alligned width :-(

假设有一张图片宽度为6,因为是Format24bppRgb格式(每像素3字节。在以下的讨论中,除非特别说明,否则Bitmap都被认为是24位RGB)的,显然,每一行需要6*3=18个字节存储。对于Bitmap就是如此。但对于BitmapData,虽然BitmapData.Width还是等于Bitmap.Width,但大概是出于显示性能的考虑,每行的实际的字节数将变成大于等于它的那个离它最近的4的整倍数,此时的实际字节数就是Stride。就此例而言,18不是4的整倍数,而比18大的离18最近的4的倍数是20,所以这个BitmapData.Stride = 20。显然,当宽度本身就是4的倍数时,BitmapData.Stride = Bitmap.Width * 3。

画个图可能更好理解。R、G、B 分别代表3个原色分量字节,BGR就表示一个像素。为了看起来方便我在每个像素之间插了个空格,实际上是没有的。X表示补足4的倍数而自动插入的字节。为了符合人类的阅读习惯我分行了,其实在计算机内存中应该看成连续的一大段。

Scan0

|-------Stride-----------|
|-------Width---------|  |
BGR BGR BGR BGR BGR BGR XX
BGR BGR BGR BGR BGR BGR XX
BGR BGR BGR BGR BGR BGR XX
.
.
.

C# 中的 Bitmap.FromFile 文件锁定问题

以前一直用Bitmap bmp = (Bitmap)Bitmap.FromFile(filename);来读取图片,经常会出现就算bmp.Dispose()后文件还是无法删除的情况;
最好的方法为:
Image img = Image.FromFile(filename);
Bitmap bmp = new Bitmap(img);

C++ 模板

模板函数:

template <class T>

T func(T t1)

{

return t1;

}

模板类:

template <class T>

class CA

{

public:

T func(T t1);

}

template <class T>

T CA<T>::func(T t1)

{

return t1;

}

四种不同的对象生存方式

in stack:      int a;

in heap:      int* pa = new int;

global:       int a; (not in a function)

local static:      static int a;

关于static

static 3种用法

类的成员:。。。

函数中变量:。。。

全局:若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度

拷贝构造函数

class CA
{
public:
CA()
{
_i = 7;
}
CA(const CA& ca)
{
this->_i = ca._i;
}
private:
int _i;
};
int _tmain(int argc, _TCHAR* argv[])
{
CA a;
CA b = a;
return 0;
}
CA b = a; 会调用拷贝构造函数;
若改为:
CA b;
b = a; 不会调用拷贝构造函数,但如果存在会调用以下函数:
CA& operator = (const CA& ca)
{
this->_i = ca._i;
return *this;
}

多继承类的指针偏移问题

例如:
struct C1
{
public:
virtual void D1() = 0;
};
class C2
{
public:
virtual void D2() = 0;
};
class C : public C1, public C2
{
public:
virtual void D1()
{
C* p = this;
C1* q = this;
C2* r = this;
}
virtual void D2()
{
C* p = this;
C1* q = this;
C2* r = this;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
C c;
c.D1();
c.D2();
return 0;
}
this指针会在转换时调整
D1中this: 0x0035f7fc     p: 0x0035f7fc     q: 0x0035f7fc     r: 0x0035f800
D2中this: 0x0035f800   p: 0x0035f7fc     q: 0x0035f7fc     r: 0x0035f800