C++ 无法使用const值调用一组none const值的find方法。const_cast可以用来解决这个问题吗?
让我们假设下面的p必须是指向const X的指针。那么就不可能用我的特殊比较类调用find来获得指向X的一组指针。这是“set”和“find”的缺点吗?像我这样用const_cast解决它安全吗C++ 无法使用const值调用一组none const值的find方法。const_cast可以用来解决这个问题吗?,c++,set,constants,C++,Set,Constants,让我们假设下面的p必须是指向const X的指针。那么就不可能用我的特殊比较类调用find来获得指向X的一组指针。这是“set”和“find”的缺点吗?像我这样用const_cast解决它安全吗 struct X{ std::string key; X(std::string s): key(s) {} }; struct compare { bool operator() (const X* lhs, const X* rhs) const { retu
struct X{
std::string key;
X(std::string s): key(s) {}
};
struct compare {
bool operator() (const X* lhs, const X* rhs) const {
return lhs->key < rhs->key;
}
};
int main() {
std::set<X*,compare> m;
const X a("hello");
const X*p=&a;
std::set<X*,compare>::const_iterator it=m.find(const_cast<X*>(p));
}
struct X{
std::字符串键;
X(std::string s):键{}
};
结构比较{
布尔运算符()(常数X*lhs,常数X*rhs)常数{
返回左键->右键->右键;
}
};
int main(){
std::集m;
const X a(“你好”);
常数X*p=&a;
std::set::const_迭代器it=m.find(const_cast(p));
}
这种使用常量的方法是安全的,但是任何使用常量的方法都是可怕的<代码>常量转换
是合法的,只要您不通过转换修改对象,而std::set::find
不这样做
但是,这里不需要const\u cast
。如果你做出决定,那就选择允许。这正是我们想要的:
结构比较{
使用is_transparent=void;//使用哪种类型无关紧要
布尔运算符()(常数X*lhs,常数X*rhs)常数{
/您可能需要考虑使用STD::比较这些。
//less可以比较不属于
//相同的数组,不允许仅使用简单的小于
//比较。
返回左键->右键->右键;
}
};
完整示例:您使用的是C++14或更高版本吗?是的,我使用的是C++17