concentrate on c/c++ related technology

plan,refactor,daily-build, self-discipline,

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  37 Posts :: 1 Stories :: 12 Comments :: 0 Trackbacks

常用链接

留言簿(9)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

const 常量函数只能调用其中的常量相关的东西。
struct StringLess:
 public std::binary_function<const std::string&,
        const std::string&,
        bool>
{
 bool operator()(const std::string& a, const std::string& b)const
 {
  return strcmp(a.c_str(),b.c_str());
 }
};

std::map<std::string,Core::Rtti*,StringLess> nameTable;
 Core::Rtti* Factory::GetRttiName(std::string className)const
 {
  return this->nameTable[className];
 }
但是还发现出现错误。
g:\framework\foundation\foundation\core\factory.cpp(60) : error C2678: 二进制“[”: 没有找到接受“const std::map<_Kty,_Ty,_Pr>”类型的左操作数的运算符(或没有可接受的转换)
        with
        [
            _Kty=std::string,
            _Ty=Core::Rtti *,
            _Pr=StringLess
        ]
        e:\microsoft visual studio 8\vc\include\map(166): 可能是“Core::Rtti *&std::map<_Kty,_Ty,_Pr>::operator [](const std::basic_string<_Elem,_Traits,_Ax> &)”
        with
        [
            _Kty=std::string,
            _Ty=Core::Rtti *,
            _Pr=StringLess,
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]
        试图匹配参数列表“(const std::map<_Kty,_Ty,_Pr>, std::string)”时
        with
        [
            _Kty=std::string,
            _Ty=Core::Rtti *,
            _Pr=StringLess
        ]
这里主要是const函数的滥用,因为不清楚const函数究竟能对什么进行操作就滥用。
map的const对象不可以调[]。
operator[] 不是 const类型。
所以这个错误基本上将const去掉就好了。
这里总结一些东西,以前也滥用过const的东西
返回const表示这个返回内容是只读的,不能被修改的。
参数使用const表示这个参数是只读的,而不能进行任何修改,只参与计算,而不修改本身。
const常函数,只能对常量进行操作,说明在这里主要是进行常量成员的操作,而不做任何与const无关的操作,上面就是个很好的例子。
posted on 2008-09-03 10:20 jolley 阅读(1608) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理