鉴于这个小程序
#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引用的对象在哪里?看起来很明显 他们是堆栈分配但我想确定。
答案 0 :(得分:1)
输出“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的形式意义上并没有完全“分配”,而是一个局部变量(实际存储它是特定于实现的)