【发布时间】:2014-09-02 12:53:35
【问题描述】:
在下面的代码中,一个对象的非const方法调用了同一个对象的const方法,该方法返回一个指向对象字段的const指针,然后这个返回的指针被强制转换为非const 版本——这是一种类似于此答案中的技术:Elegant solution to duplicate, const and non-const, getters? [duplicate]。但是,由于我将指针放入复杂的数据结构中,我不确定它是否真的有效。会吗?
class Struct {
private:
Field f, g;
std::map<std::string, const FieldBase*> const_fields_t;
std::map<std::string, FieldBase*> fields_t;
public:
const_fields_t get_fields() const {
return const_fields_t { { "f", &f }, { "g", &g } };
}
fields_t get_fields() {
const Foo* = this;
fields_t result;
foreach(auto& v : const_this->get_fields()) {
result[v->first] = const_cast<FieldBase*>(v->second);
}
return result;
}
};
【问题讨论】:
-
它会起作用,但我认为仅用于具有 const-non-const 复制的深复制容器有点开销。
-
你可以这样做,但在上面的代码中还有一些其他的事情需要解决。
标签: c++ pointers constants const-cast