c++ - 返回对属性的引用 (GCC)

标签 c++ gcc reference

我是第一次使用 gcc(以前是 msvc),现在我在返回对我的类中的变量的引用时遇到了一些问题。这是代码:

class Foo
{
public:

  const int& getMyVar() const
  {
      return mMyVar;
  }

private:
  int mMyVar;
};

如果有比简单 int 更大的数据结构,我无法想象我必须返回拷贝而不是引用。

这是编译错误:

error: invalid initialization of reference of type 'int&' from expression of type 'int'

如果你能帮助我并告诉我如何解决我的问题,那就太好了。

最佳答案

给定以下代码,它是您的类的一个小变体(添加了构造函数;在类后添加了分号)和一个简单的 main(),我得到了编译错误:

z1.cpp: In function ‘int main()’:
z1.cpp:19:26: error: invalid initialization of reference of type ‘int&’ from expression of type  ‘const int’

第 19 行是 const int &v2 = f.getMyVar(); 行。去掉引用标记,就可以了。

class Foo
{
public:

  Foo(int n = 0) : mMyVar(n) {}
  const int& getMyVar() const
  {
      return mMyVar;
  }

private:
  int mMyVar;
};

int main()
{
    Foo f;
    int  v1 = f.getMyVar(); // Copies result
    int &v2 = f.getMyVar(); // Error: must be const
    const int &v3 = f.getMyVar(); // OK as long as there's a default constructor
    return v1 + v2 + v3;
}

关于c++ - 返回对属性的引用 (GCC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17647971/

相关文章:

c++ - 从对这些项目的引用 vector 访问链接列表项目

c++ - C++ 的 Option/Maybe 类

c++ - 在不破坏遗留代码的情况下将成员添加到现有结构

c - 使用内联组件绘制像素 VGA

c++ - 为什么 GCC 允许在 C++ 中使用 round() 即使带有 ansi 和 pedantic 标志?

c++ - 如何在不使用指针的情况下编写对 10 个整数数组的引用?

iphone - 包含 <string> 时 <cstdio> 出错

c++ - 将 Struct 对象插入队列时出现问题

c - 函数定义和外部声明不同;但是 GCC 甚至没有警告并通过了编译

c++ - 右值不适用于引用