在构造函数中从 std::istream 初始化 const 类数据成员
Initialising const class data member from std::istream in constructor
我想从 std::istream 初始化构造函数中的类 const 成员:
class MyClass {
private: const int dataMember;
public: MyClass(std::istream& is) { /* read into datamember }
}
我想使用 istream 实例>>运算符来填写我的数据成员,但我的数据成员是常量。C++有什么办法可以做到这一点吗?
当然,只需将其包装在一个函数中:
MyClass(std::istream& is) : dataMember{readInt(is)}{}
您可以通过从帮助程序函数抛出来处理输入错误。
如果你真的想在没有辅助函数的情况下做到这一点,你可以用istream_iterator
来强制它:
MyClass(std::istream& is) : dataMember{*std::istream_iterator<int>(is)}{}
但是,这将导致一些古怪的错误处理。错误处理可以通过std::istream::exceptions
完成,但调用者必须记住启用它们。否则,失败的读取操作将调用 UB。
出于错误处理的原因,我更喜欢帮助程序功能。(特别是因为我花了三次迭代才把它做好,而我提倡一次就把UB说得对了。
您可以创建一个函数来接收流并返回一个对象。此函数从流中提取数据并将其放入构造函数中。
static MyClass fromIStream(std::istream& is) {
int datamember;
is >> datamember;
return MyClass(datamember);
}
相关文章:
- 如何在旧c++中初始化const-std向量
- 我可以初始化 const 实例,以便我可以将其用作 const 来初始化数组吗?
- 使用 const char* 初始化 const ref 字符串成员时幕后会发生什么
- 如何使用函数的输出初始化 const 数组结构字段?
- 有效地初始化 const std::vector 类成员
- 正在初始化const boost multi_array
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 如何在现代C++中用生成器初始化 const 容器?
- 初始化 const 成员的正确方法
- 如何通过头文件中的函数初始化 const int 数组?
- 通过与现有 QHash 连接来初始化 const QHash
- C++ 在头文件或构造函数中初始化 const 类成员变量?
- 在没有构造函数的情况下初始化 const c++ 类
- 如何初始化 const std::vector<MyClass>
- 使用静态方法初始化 const 类字段的做法是好是坏
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 从constructor参数中初始化const多维数组中的const多维数组
- 初始化const 3D数组成员变量
- 在同一构造函数中使用该 const int 初始化 const int 和对象
- 在构造函数中初始化const字段,但首先检查一个参数