0

この小さなプログラムを考えると

#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 によって参照されるオブジェクトが割り当てられている場所はどこですか? それらがスタックに割り当てられていることは明らかですが、確認したいと思います。

4

1 に答える 1

1

出力 "30" は、実際には "3" と "0" の 2 つの数値です。

3 は引数スタックから取得され、A コンストラクターの性質により暗黙的に A オブジェクトに変換されます。

0 は ra2 = A() から取得されます。このコンストラクターを送信するとき、A にはパラメーターがないため、A(int n = 0) はデフォルトで int n = 0 になります。コンストラクター自体は n (0) を取り、m_int を 0 に設定します。

cout は 3 と 0 を連結するので、30 のように見えます。

あなたの質問に答えるために、オブジェクトは暗黙的に構築されます.mallocの正式な意味では完全に「割り当てられた」のではなく、ローカル変数です(実際に格納される場所は実装固有です)

于 2013-06-22T22:37:54.440 に答える