C++ 编码风格:我应该使用关键字mutable为成员方法提供直观的签名吗? 例如,考虑路径压缩下的不相交集合数据结构: 是的,这正是mutable发明的目的。我之所以选择这个例子是因为它非常极端,所有数据成员都必须是可变的。但在这种情况下你还会用它吗?这就是我目
编码风格:我应该使用关键字mutable为成员方法提供直观的签名吗?C++ 编码风格:我应该使用关键字mutable为成员方法提供直观的签名吗? 例如,考虑路径压缩下的不相交集合数据结构: 是的,这正是mutable发明的目的。我之所以选择这个例子是因为它非常极端,所有数据成员都必须是可变的。但在这种情况下你还会用它吗?这就是我目,c++,constants,signature,mutable,C++,Constants,Signature,Mutable,编码风格:我应该使用关键字mutable为成员方法提供直观的签名吗? 例如,考虑路径压缩下的不相交集合数据结构: 是的,这正是mutable发明的目的。我之所以选择这个例子是因为它非常极端,所有数据成员都必须是可变的。但在这种情况下你还会用它吗?这就是我目前正在做的,可能是因为我的项目的性质,但我最终发现大多数数据成员都是可变的,这感觉不太对。您对逻辑应用程序级别的平等感兴趣。如果一个函数保留它,它应该是常量。如果没有,就不应该。任何结果变为可变的东西都应该保持可变。如果所有的数据成员都变为可变
例如,考虑路径压缩下的不相交集合数据结构:
是的,这正是mutable发明的目的。我之所以选择这个例子是因为它非常极端,所有数据成员都必须是可变的。但在这种情况下你还会用它吗?这就是我目前正在做的,可能是因为我的项目的性质,但我最终发现大多数数据成员都是可变的,这感觉不太对。您对逻辑应用程序级别的平等感兴趣。如果一个函数保留它,它应该是常量。如果没有,就不应该。任何结果变为可变的东西都应该保持可变。如果所有的数据成员都变为可变的,那么就这样吧。这是很多可变的,谢谢你的帮助!Herb Sutter开始了一场有趣的讨论,讨论C++11如何改变可变常数的含义。请参阅,以获取发起讨论的谈话的参考资料以及不同意的人的一些回答。
struct DisjointSet {
/* Other stuff*/
int find(int x) {
if(parent[x] != x) {
parent[x] = find(parent[x]);
}
return parent[x];
}
private:
std::vector<int> parent;
};
struct DisjointSet {
/* Other stuff*/
int find(int x) const {
if(parent[x] != x) {
parent[x] = find(parent[x]);
}
return parent[x];
}
private:
mutable std::vector<int> parent;
};