这些参数分配在哪里

Where are these parameters allocated

本文关键字:在哪里 分配 参数      更新时间:2023-10-16

给定这个小程序

#include <iostream>
class A {
public:
  A(int n = 0): m_int(n) {}
  int m_int;
};
void f(const A& ra, const A& ra2 = A())
{
  std::cout << ra.m_int << ra2.m_int << std::endl;
}
int main()
{
  f(3);
}

输出为30。我理解整数到A对象的隐式转换。我的问题ra和ra2引用的对象分配在哪里?很明显它们是堆栈分配的,但我想确定一下。

输出"30"实际上是两个数字,"3"和"0"。

3是从参数堆栈中获得的,由于A构造函数的性质,它被隐式转换为A对象。

0是从ra2=A()中得到的。发送此构造函数时,A没有参数,因此A(int n=0)默认为int n=0。构造函数本身采用n(0)并将m_int设置为0。

由于cout将3和0连接在一起,所以它看起来像30。

为了回答您的问题,对象是隐式构建的——它不是malloc形式意义上的"分配",而是一个局部变量(它实际存储的地方是特定于实现的)