std::vector<Token>& tokens; 是什么意思?做什么?

问题描述 投票:0回答:1

我正在编写一个解析器,其中我的代码具有这样的结构(删除了这个问题的所有不重要部分):

class Token
{
    private:
        char kind;
    
    public:
        Token(char kind) : kind(kind) {}
        inline char getKind() const {return kind;}
};

class Parser
{
    private:
        const std::vector<Token>& tokens;
    
    public:
        Parser(const std::vector<Token>& tokens) : tokens(tokens) {}
};

&
后面的
std::vector<Token>
是无意添加的。结果是以下返回了一个未定义的值:

auto it = tokens.begin();
(*it).getKind();

发现问题后,我删除了

&
,代码按预期工作。我想知道的是
const std::vector<Token>& tokens;
到底是做什么的?该代码没有给出任何编译器警告或错误,这是否意味着像这样使用
&
在某些情况下很有用?

c++ class vector
1个回答
0
投票

将引用变量作为类的成员的情况非常罕见,因为您无法控制所引用对象的生命周期。看来您通过传递临时向量或其他变量创建了

Parser
类的实例,而这些变量在
Parser
尝试使用它时已被销毁。

通过从成员变量声明中删除

&
,您可以强制对象复制传递给构造函数的向量。

另一方面,通过 const 引用传递参数是很常见的,有助于防止生成过多的副本。

© www.soinside.com 2019 - 2024. All rights reserved.