自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(25)
  • 资源 (2)
  • 收藏
  • 关注

原创 “标准容器中存放引用”与“指向引用的指针(pointer to reference)”

“标准容器中存放引用”与“指向引用的指针(pointer to reference)”大家都知道,标准容器中是“按值”存放并操纵存放于其中的实例的,不允许在标准容器中存放“引用”。vector a;编译过后,会出现一大堆的错误,但是我们可以很容易找到“pointer to reference is illegal”之类的字眼儿,即“指向引用的指针”是非法的:因为容器中很可能有“

2007-02-24 12:36:00 1485 1

原创 不可以将数组名取地址赋给指针(那并不是“数组退化”行为)

int a[4] = {1, 2, 3, 4};对于这样的一个数组,"a"和"&a"代表的地址是相同的,即都是“数组首地址”(这已经是老生常谈了,究其原因是编译器“捣的鬼”,因为编译器知道a是一个数组名,所以它故意让&a返回与a相同的地址值。如果你不相信的话,可以打印出来看看)。但是,尽管"a"和"&a"代表相同的地址,我们仍然不能用“int *p = &a;”代替“int *p = a;

2007-02-22 12:38:00 1111

原创 “&((char)b)”:居然犯了这样的低级错误

为了测试bool的底层存储,我写出了这样的代码:bool b = 4;char *pc = &((char)b); //My GODNESS!!cout 编译器给了我无情的拒绝:“& requires l-value”。看到这条消息,我真的有点儿不太相信这是我写出的代码(真的,我真不相信)!!居然犯了这样的低级错误,强制转换的结果不是左值,是不可以取地址的。所以我写到这里,给自己最

2007-02-19 18:07:00 878

原创 我们无法重写[全局定位operator new],只能定义[类属定位operator new]

我们无法重写[全局定位operator new],只能定义[类属定位operator new]我们可以重写全局operator new,但是全局定位operator new除外,因为全局定位operator new的定义已经被内联到头文件(应该是头文件)中了,而其他全局operator new则仅仅是声名而已,以下是gcc编译环境中头文件中的部分内容:-------------------

2007-02-07 20:38:00 775

原创 到底该用assert宏做什么?

assert非常有用,不用它是你的损失,但是滥用它同样是你的灾难。assert宏用来检查违反[模块/子系统(即,调用代码和被调用代码由同一个人或开发小组维护)内部各种假设]的错误,这种错误是模块/子系统内部的编程问题引起的(即这些错误完全是程序员的代码编写错误,是程序员的过错)。上述就是我们应该利用assert宏检查的唯一错误类型,我们万万不可以用assert来检查运行时错误(如,

2007-02-07 20:23:00 982 1

原创 你真的了解explicit了么?

将explicit用于constructor的本质含义是:[不需要编译器“插手”为我们调用construtor]。看看下面的代码:class A{public: A(){} explicit A(const A&){}};int main(){ A a1; A a2(a1); //没问题 A a3 = a1; //编译错误 return 0;}语句“A a2(a1);”没有任何问题

2007-02-06 21:39:00 650

原创 跟virtual destructor“零距离接触”

我们最为熟悉的“virtual destructor”行为就是在delete时的动态析构行为,但是又没有直接用指针或者引用来试验“多态析构”的经历呢?下面就一起来试试吧^_^class A{public: virtual ~A(){  cout  }};class B : public A{public: ~B(){  cout  }};int main(int argc, cha

2007-01-31 13:26:00 684 1

原创 用NULL(0)去构造string是非法的

用NULL(0)去构造string是非法的,即string a(0);这是非法的代码。(1) 首先,string提供了接受一个const char *参数的construtor,这个构造函数执行的是“深拷贝”,即并不是简单地将传入的const char*指针保存在内部私有字段,而是自己重新开辟内存,然后将传入的const char*所指向的字符串“strcpy”到这块新创建的内存中;

2007-01-26 12:25:00 695

原创 子类中using引入基类函数时需要注意的情况

子类中using引入基类函数时需要注意的情况class base{public: void test(){  cout  } void test(int){  cout  }};class derived : public base{public: void test(){  cout  }};此时derived::test()会隐藏(hide)父类中的两个test重载函数(base::t

2007-01-24 21:18:00 1252

原创 private真的会骗人?

今天,一个朋友给我拿来这样一段代码,对private提出“两点质疑”,说“C++的private有时候会骗人”:class base{public: void test(){  vfunc(); }private: virtual void vfunc(){  cout  }};class derived : public base{private: virtual void vfunc(){

2007-01-24 12:14:00 995

原创 如果异常类的构造函数抛出异常,会发生什么?

如果异常类的构造函数抛出异常,会发生什么?1. 如果异常类的复制构造函数抛出异常,则程序会中止(abort)。上述结论是肯定成立的,但是对此还有很多实际情况需要区分对待,如下所述。首先:class foo{public: foo() {} foo(const foo&){  throw 1; }};int main(int argc, char **argv){ try{  foo f; 

2007-01-21 20:10:00 1615

原创 宏能够自动匹配小括号和方括号(尖角号除外)

引自《C++ Coding Standards - 101 Rules, Guidelines, and Best Practices》16条:-------------------------------------------------------------------------------------------宏能够理解C语言的小括号和方括号,并将其进行匹配。然而,C++又定义了一个

2007-01-16 17:06:00 1367

原创 对抽象类执行sizeof

class abstr{ //抽象类public: virtual void test() = 0; //pure virtual函数};cout 虽然抽象类abstr不能被实例化,但是这仅仅是[程序级别]的限制,编译器还是会把此抽象类转换成一个struct,里面仅仅包含一个vptr,所以可以对class abstr进行sizeof操作,成功编译且正确输出。 

2007-01-03 12:07:00 756

原创 派生类的布局类似于C中内嵌结构的pack问题

RT.首先,struct sss{ double a; char b; char c;};此时,sizeof(sss)为16;然后,struct ss{ double a; char b;};struct sss{ ss   s; char c;};此时,sizeof(sss)为24,因为ss这个结构“整体”的对齐要求是8,而且“整体”占用16bytes;最后,看看

2006-12-28 12:45:00 616

原创 友元 PK 成员

Matthew Wilson(Imperfect c++的作者)和Scott Meyers(effective系列的作者)都是响当当的大人物,可是他们在 友元和成员的问题上似乎存在一些分歧。“If you follow the practice of defining free-functions, as much as is possible, in terms of class metho

2006-12-15 16:59:00 683

原创 void func(int (*arr)[])与void func(int (*arr)[3])有区别么?

大家都知道void func(int arr[]);与void func(int arr[3]);都等价于void func(int *arr);但是void func(int (*arr)[])和void func(int (*arr)[3]);都等价于void func(int **arr);么?1. g++ 3.4.2上的试验结果:void func(int (*arr)

2006-12-03 18:59:00 1087

原创 nested class 是不是外围类的友元?

  法律放在那儿,你可以去服从,也可以违抗;C++标准摆在那儿,编译器厂商可以遵守,也同样可以违背。   我相信,熟悉C++的人肯定都会在某个编译器上发现其不符合标准之处,但是我下面要提到的这一点却是很多编译器“联名”对C++标准提出的[抗议]。   C++标准11.8-1: "The members of a nested class have no special access to memb

2006-11-23 12:29:00 672

原创 C++编译器更加喜欢声明(相对于表达式而言)^_^

今天回答了一个帖子http://community.csdn.net/Expert/topic/5174/5174525.xml?temp=.9001123勾起了我很多的回忆阿,很多东西都快淡忘了,多谢这个帖子^_^ 

2006-11-21 18:07:00 607

原创 如果类内含const member或者reference member......

如果类内含const member或者reference member,则编译器拒绝为它合成default constructor和copy assignment operator,但是编译器可以为此类合成copy constructor。 (注:这些特殊函数,只有确实用到它们的时候,编译器才会尝试去合成,如果没用到,则编译器干脆不会合成)

2006-11-18 12:42:00 623

原创 restrict关键字

c99新增加了一个restrict关键字,是用来对修饰指针的,以方便编译器进行优化。以前还真就不知道这个关键字,偶然的机会看到了它,查了一下,觉得下面的帖子说得比较明白:http://topic.csdn.net/t/20041027/08/3494296.html看来还要补充营养阿^_^ 

2006-11-06 16:28:00 692

原创 重载解析一则疑问

下面是截自[c++ standard 03 ] 13.3.3中的一个有关重载解析的例子:-------------------------------------------------------------------------------------------------------------------------------------------------void Fc

2006-11-03 14:26:00 571

原创 编译器会为你[过滤掉]多余的const

------------------------------------------------------------------------------------------------------------------------------------------------------首先说明一下:void test(const const int);这样声明肯定是错误的。现

2006-11-03 14:15:00 540

原创 (Type&)a:小心这种‘转型’

double a = 1.2;int b = (int&)a;//将原有double对象内存布局的前4bytes解释为一个int此时a而int b = (int)a;此时a==1。 

2006-10-22 18:00:00 580

原创 对于没有虚拟函数的类而言,RTTI是编译时期的事件

“对于没有虚拟函数的类而言,RTTI是编译时期的事件”~~RTTI:[运行时]型别鉴定 。仅仅因为没有virtual的东西,变成[编译时期]的事件了,惨阿:(

2006-10-21 19:42:00 578

原创 global statics的地址也可以当成编译期常量

 int a = 4;template void test(){ cout } test(); //OK,&a编译时期已知这个特性我很早以前知道,时间长了就淡忘了,现在写在这里,备忘一下

2006-09-17 15:39:00 651

“好记性”定时提醒工具(V1.1)

这是一款定时提醒工具,简便实用,通过简单设置提醒时间和提醒内容之后,您会在每天固定时间收到系统提示,以免忘记重要工作和关键约会,等等; 这是一款绿色软件,无需安装即可使用,软件内置“开机启动”功能,因此如果想每天获得提醒服务,您只需设置一下“开机启动”即可; 注:此程序需要.NET环境来运行。

2009-10-28

“好记性”日程提醒工具

这是一款日程提醒工具,简便实用,通过简单设置提醒时间和提醒内容之后,您会在每天固定时间收到系统提示,以免忘记重要工作和关键约会,等等; 这是一款绿色软件,无需安装即可使用,因此如果想每天获得提醒服务,需要您手动将此软件设置为开机自动启动; 注:此程序需要.NET环境来运行。

2009-10-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除