gpt4 book ai didi

c++ - 在 C++ 函数中通过引用返回的目的是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:35:41 25 4
gpt4 key购买 nike

我的问题是关于在函数中通过引用返回。例如,我有代码:

主要.cpp

class Vector{
public:
Vector(int a , int b){
x = a;
y= b;
}

Vector() { }

int x = 1;
int y = 1;
};

Vector& operator+(const Vector& lvec ,const Vector& rvec ){
Vector resvec;
resvec.x = lvec.x + rvec.x;
resvec.y = lvec.y + rvec.y;
return resvec;
}

int main(){
Vector vecone(1,2);
Vector vectwo(1,2);
Vector resultvec = vecone + vectwo;
cout<<endl<<"X:"<<resultvec.x<<endl<<"Y:"<<resultvec.y;
}

它运行和工作得很好,但是,我似乎不理解运算符重载函数中引用运算符 ( & ) 的用途,但我在许多包含运算符重载函数的源代码中看到它。当我解雇运算符(operator)时,程序似乎运行得很好,所以我的问题是 - 在函数中通过引用返回的目的是什么?它是否服务于我提供的代码中的特殊目标?

最佳答案

这个运算符的定义

Vector& operator+(const Vector& lvec ,const Vector& rvec ){
Vector resvec;
resvec.x = lvec.x + rvec.x;
resvec.y = lvec.y + rvec.y;
return resvec;
}

错了。它返回对本地对象 resvec 的引用,该对象将在控件退出该函数后被销毁。因此引用将无效,结果程序具有未定义的行为。

一个正确的定义应该是这样的

Vector operator +( const Vector& lvec , const Vector& rvec )
{
return { lvec.x + rvec.x, lvec.y + rvec.y };
}

或者喜欢

Vector operator +( const Vector& lvec , const Vector& rvec )
{
return Vector( lvec.x + rvec.x, lvec.y + rvec.y );
}

或者返回的类型可以声明为 const Vector

尽管如此,经常使用引用作为返回类型,尤其是在下标运算符的声明中

举个例子

这是一个演示程序

#include <iostream>

class Vector
{
public:
Vector( int a , int b ) : x( a ), y( b )
{
}

Vector() : x( 0 ), y( 0 )
{
}

size_t size() const { return 2; }

int & operator []( size_t i ) { return i == 0 ? x : y; }
int operator []( size_t i ) const { return i == 0 ? x : y; }

private:
int x;
int y;
};

int main()
{
Vector v( 10, 20 );

for ( size_t i = 0; i < v.size(); i++ ) std::cout << v[i] << ' ';
std::cout << std::endl;

for ( size_t i = 0; i < v.size(); i++ ) ++v[i];

for ( size_t i = 0; i < v.size(); i++ ) std::cout << v[i] << ' ';
std::cout << std::endl;
}

它的输出是

10 20 
11 21

关于c++ - 在 C++ 函数中通过引用返回的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31614031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com