Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++ 编码风格:我应该使用关键字mutable为成员方法提供直观的签名吗? 例如,考虑路径压缩下的不相交集合数据结构: 是的,这正是mutable发明的目的。我之所以选择这个例子是因为它非常极端,所有数据成员都必须是可变的。但在这种情况下你还会用它吗?这就是我目_C++_Constants_Signature_Mutable - Fatal编程技术网

C++ 编码风格:我应该使用关键字mutable为成员方法提供直观的签名吗? 例如,考虑路径压缩下的不相交集合数据结构: 是的,这正是mutable发明的目的。我之所以选择这个例子是因为它非常极端,所有数据成员都必须是可变的。但在这种情况下你还会用它吗?这就是我目

C++ 编码风格:我应该使用关键字mutable为成员方法提供直观的签名吗? 例如,考虑路径压缩下的不相交集合数据结构: 是的,这正是mutable发明的目的。我之所以选择这个例子是因为它非常极端,所有数据成员都必须是可变的。但在这种情况下你还会用它吗?这就是我目,c++,constants,signature,mutable,C++,Constants,Signature,Mutable,编码风格:我应该使用关键字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;
};