【问题标题】:Syntax for const accessor by reference通过引用的 const 访问器的语法
【发布时间】:2010-04-15 18:01:46
【问题描述】:

现在我的实现按值返回事物。成员 m_MyObj 本身不是 const - 它的值根据用户使用组合框选择的内容而变化。我不是 C++ 大师,但我想做这件事。如果我只是在两个声明中将& 放在GetChosenSourceSystem 前面。和impl。,我得到一种编译器错误。如果我做一个但不做另一个 - 另一个错误。如果我这样做return &m_MyObj;。我暂时不会在这里列出错误,除非有强烈的需求。我假设有经验的 C++ 编码人员可以知道这里发生了什么。我可以省略 constness 或 reference,但我想把它弄紧并在这个过程中学习。

// In header file
MyObj GetChosenThingy() const;

// In Implementation file.
MyObj MyDlg::GetChosenThingy() const
{
    return m_MyObj;
}

【问题讨论】:

    标签: c++ constants accessor


    【解决方案1】:

    返回的对象必须是 const,所以你不能从外部改变它;

    // In header file
    const MyObj& GetChosenThingy() const;
    
    // In Implementation file.
    const MyObj& MyDlg::GetChosenThingy() const
    {
        return m_MyObj;
    }
    

    【讨论】:

    • 要记住的另一件事。如果我假设 m_MyObj 是 MyDlg 的数据成员,请确保引用不再保留在返回它的对象周围。如果您尝试访问已删除对象的成员,则不会发生任何好事。
    • 另外,请您详细说明哪个 const 做什么?
    • @Hamish: 左边的 const 表示返回的 MyObj& 是 const,不能修改。右边的 const 表示当函数 GetChosenThingy 没有以任何方式修改类 MyDlg () 被执行。
    猜你喜欢
    • 2023-03-03
    • 2012-12-08
    • 2020-04-10
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多