考虑以下C ++代码:
// friend functions
#include <iostream>
using namespace std;
class CRectangle {
int width, height;
public:
void set_values (int, int);
int area () {return (width * height);}
friend CRectangle duplicate (CRectangle);
};
void CRectangle::set_values (int a, int b) {
width = a;
height = b;
}
CRectangle duplicate (CRectangle rectparam)
{
CRectangle rectres; // Defined without using new keyword. This means scope of this variable of in this function, right ?
rectres.width = rectparam.width*2;
rectres.height = rectparam.height*2;
return (rectres);
}
int main () {
CRectangle rect, rectb;
rect.set_values (2,3);
rectb = duplicate (rect);
cout << rectb.area();
return 0;
}
变量“CRectangle rectres”在函数“CRectangle duplicate”中定义。
这是否意味着变量“CRectangle rectres”的范围仅限于该函数? (因为它是在不使用新关键字的情况下定义的)
如果回答上述问题是肯定的,那么如何回复(因为它是一个局部变量)?
答案 0 :(得分:1)
rectres
答案 1 :(得分:1)
关于1&amp;的问题帕特里克已经对2进行了充分的回答,但我认为我可以扩展一下:
返回结构或类对象时,MOST编译器的工作方式[1]是调用函数传递一个指针参数(在视图中隐藏)以获取“return here”值。因此被调用的函数会将结果复制到调用代码提供的位置 - 实际的副本由类的复制构造函数完成。
注意1:C ++标准没有说明编译器应该如何做到这一点,如果编译器可以产生神奇的代码,只使用星球大战中的“力量”来移动位,那么根据标准。