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无关的操作,上面就是个很好的例子。