Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法使用const值调用一组none const值的find方法。const_cast可以用来解决这个问题吗?_C++_Set_Constants - Fatal编程技术网

C++ 无法使用const值调用一组none const值的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

让我们假设下面的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 {
        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