hehehou

keep silent and hehehou, so few years we live

导航

2013年9月9日

摘要: 引子:同事前几天用hash_map时发现一些问题。当时的场景是有一些字符串char*,要去对应某种类型的对象。同事的做法是:尝试用char*作为key进行hash。编译通过,但运行时不正常,insert操作可以成功,但find操作基本都失败改用string将原字符串包装后作为key进行hash。编译时不能通过google后,用string作key,并添加了一个template struct hash的仿函数作为hash_map的构造参数。编译通过,运行正常,但不知原委为何带着这三个问题去查看了libstdc++中关于hash_map的实现(省略了与讨论无关部分): 1 // hash_map 阅读全文

posted @ 2013-09-09 21:21 Springlie 阅读(2400) 评论(0) 推荐(2) 编辑

2012年11月14日

摘要: 先说点题外话。在C++中,有两个行为:如果某函数接受的参数不是期待的类型,编译器会尝试进行隐式的转换。将传入参数进行适配,使得函数调用能够成功这样的隐式的转换只能进行一次。编译器不可能先将TypeA隐式转换为TypeB,接着又把TypeB隐式转换为TypeC下面一段代码验证了这两个行为: 1 struct A 2 { 3 int _m; 4 A():_m(0){}; 5 }; 6 7 struct B 8 { 9 A _m; 10 int _alias;11 B(A a):_m(a),_alias(0){};12 };13 14 struct C15... 阅读全文

posted @ 2012-11-14 18:58 Springlie 阅读(214) 评论(0) 推荐(0) 编辑

摘要: 问题:在《exceptional c++》一书中描述第5~6问题时,给出一个类fixed_vector的定义,其中包含了两个成员模板函数。《exceptional c++》说明:这两个函数不能被作为拷贝构造函数和赋值函数,类型O不可能等于类型T;这两个函数也不能阻止编译器自动生成的默认拷贝构造函数和默认赋值函数。“由于模板构造函数永远都不能成为拷贝构造函数,因此它们的出现并不会妨碍在类中隐式地声明拷贝构造函数。模板构造函数,包括拷贝构造函数,将与其他构造函数一起,共同参与到重载解析中,并且,如果模板构造函数能比其他的构造函数提供更好的匹配,那么可以用它来对对象进行赋值。”具体代码如下:1tem 阅读全文

posted @ 2012-11-14 17:45 Springlie 阅读(1563) 评论(0) 推荐(0) 编辑