使用流中的常量参数创建对象

var*_*tir 7 c++

让我们假设我有一个班级

#include <iostream>
using namespace std;

class Test{
    public:
        friend istream& operator >> (istream& input, Test& test){
            input >> test.dummy;
            return input;
        };
        friend ostream& operator << (ostream& output, Test& test){
            output << test.dummy << endl;
            return output;
        };
    private:
        const int dummy;
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为虚拟是恒定的.有没有办法从文件加载并重新创建一个参数是常量的对象?

gwi*_*rrr 7

"我真的,真的需要这种"方式

使用const_cast.通常,您将它用于外部看起来像是常量的对象,但在内部它们确实需要不时地更新状态.至少可以说,使用它从流中读取有点令人困惑.

friend istream& operator >> (istream& input, Test& test){
    input >> const_cast<int&>(test.dummy);
    return input;
};
Run Code Online (Sandbox Code Playgroud)

推荐的方式

沟渠流操作员,使用工厂功能.

static Test fromStream(istream& input) {
    int dummy;
    input >> dummy;
    return Test(dummy);
}
Run Code Online (Sandbox Code Playgroud)

最好的方法

沟渠.相反,如果需要,将整个对象作为const传递.