![](/img/trans.png)
[英]GCC attribute warning with trailing return type when return type is a class
[英]Return a reference to an attribute (GCC)
我第一次使用gcc(以前是msvc),现在我在我的类中返回对变量的引用时遇到了一些问题。 这是代码:
class Foo
{
public:
const int& getMyVar() const
{
return mMyVar;
}
private:
int mMyVar;
};
如果有一个比简单的int更大的数据结构,我无法想象我必须返回一个副本而不是一个引用。
这是编译错误 :
错误:从'int'类型的表达式初始化'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;
}
它将在没有构造函数初始化的情况下编译。
#include<iostream>
using namespace std;
class Foo
{
int mMyVar;
public:
const int& getMyVar() const{return mMyVar;}
};
int main()
{
Foo foo;
int a = foo.getMyVar();
const int &b = foo.getMyVar();
cout<<"My Var a is: "<< a<<endl;
cout<<"My Var b is: "<< b;
cin.get();
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.