You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Token_stream类中istream引用成员is未初始化可运行原因咨询

class Token_stream {
public:
    Token get();                // get a Token
    void putback(Token t);      // put a token back
    void ignore(char c);        // discard characters up to and including a c
    Token_stream(istream& ii) : is{ii} { }
private:
    bool full { false };        // is there a Token in the buffer?
    Token buffer {'0'};         // here is where putback() stores a Token
    istream& is;
};

你的判断完全正确。istream&是C++的引用类型,必须在初始化阶段就绑定到一个已存在的合法对象,不存在未绑定就能正常工作的情况,这个类的设计刚好保证了这一点:

  • 该类没有提供无参构造函数,创建Token_stream实例时必须传入一个istream类型的左值引用参数(比如标准输入cin、自行打开的文件输入流ifstream对象等),作为构造函数的形参ii。
  • 构造函数的成员初始化列表: is{ii}会在实例初始化阶段,直接把私有成员is绑定到你传入的istream对象上,在整个Token_stream实例的生命周期内,is都会始终指向该输入流对象,不会出现空引用的问题。

额外注意:你传入的istream对象的生命周期必须长于对应的Token_stream实例,否则is会变成悬空引用,后续调用类方法操作is时会触发未定义行为。

内容的提问来源于stack exchange,提问作者yaelreshet11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:36:07