C++ 当运算符的地址可以设置为普通变量时,为什么运算符的地址要求从函数返回地址?
这是我的小班:C++ 当运算符的地址可以设置为普通变量时,为什么运算符的地址要求从函数返回地址?,c++,C++,这是我的小班: class test{ public: int& addressofx(); private: int x; }; int& test::addressofx(){ return x; } 主要内容如下: int main(){ test a; int& foo = a.addressofx(); } 为什么上面的编译很好,但是当我将函数addressofx转换成常规的int函数(不是int&)时,会出现错误
class test{
public:
int& addressofx();
private:
int x;
};
int& test::addressofx(){
return x;
}
主要内容如下:
int main(){
test a;
int& foo = a.addressofx();
}
为什么上面的编译很好,但是当我将函数addressofx转换成常规的int函数(不是int&)时,会出现错误
您可以这样做:
int x;
int &y = x;
没有得到x的地址,但是当你从函数返回x时,你需要它的地址吗?为什么?您没有返回任何东西的地址。你在退回一张支票 此代码将返回一个地址:
class test {
public:
int* addressofx();
private:
int x;
};
int* test::addressofx() {
return &x;
}
int main() {
test a;
int* foo = a.addressofx();
}
int&addressofx()
这是将引用返回到int
变量
int&foo=a.addressofx()
这是在声明一个非常量
左值引用(左值表示它有一个分配给它的变量名,即它可以出现在表达式的左侧),该引用保存对int变量的引用。由于函数返回对int的引用,编译器很高兴
当我将函数addressofx转换成一个常规的int函数(不是int&)时,我会得到错误吗
非常量
左值引用不能绑定到临时值(如果进行更改,addressofx()
将返回什么)。这就是rvalue引用(在C++11中引入)被设计用来处理的内容,但是在本例中您没有使用该特性
您可以这样做:int x
int&y=x 因为您正在声明一个左值引用并将其绑定到一个左值变量。这是允许的 如果更改
addressofx()
以返回int
(这是一个rvalue,因为它没有名称,所以只能出现在表达式的右侧),则返回值不能绑定到非const
lvalue引用,因为它不是实变量。但是,它可以绑定到一个常量
左值引用(然后编译器会将临时函数的生存期延长到函数返回之后),例如:
简言之,您需要详细了解引用是如何工作的,以及左值和右值之间的区别。不是所有的组合都可以一起使用。首先需要了解C++中的引用。学习引用和操作符地址之间的区别,它们都使用符号<代码>和<代码>。还有按位AND运算符(也使用符号
&
)和逻辑AND运算符(不太严格)(使用符号&
)。addressofx()不返回a.x吗?x是a的成员,在赋值过程中,它仍然存在于main()中,那么为什么它被认为是临时的?如果addressofx()
返回int&
,那么它返回a.x
的内存地址。如果返回的是int
,则返回a.x
值的临时副本。
int addressofx();
...
const int& foo = a.addressofx();