了解如何在c ++中使用简单对象

时间:2014-02-08 10:49:32

标签: c++ object output

我必须遵循以下代码:

#include <iostream>
using namespace std;


class T {
public:
    T() {}
};

class S {
public:
    static int i;
    S()    { i++; }
    S(int unused) { i += 2; }
    S(T unused)   { i += 3; }
};

int S::i = 0;

S f(S unused)
{
    return 0;
}

S g(S& unused)
{
    return 1;
}

int main()
{
    cout << S::i << "\n";
    S s1, s2(2);
    cout << S::i << "\n";
    T t;
    cout << S::i << "\n";
    S s3(t);
    cout << S::i << "\n";
    f(t);
    cout << S::i << "\n";
    g(s1);
    cout << S::i << "\n";
}

从main方法中的每个声明和实例化开始,我可以按如下方式跟随输出:

0 3 3 6 6 6

我是正确的,直到: 0 3 3 6

但是输出的最后两个数字是: 11 13

我不确定f(t)和g(s1)究竟是做什么的?我无法理解他们如何改变我的价值。 这两个陈述做了什么?

1 个答案:

答案 0 :(得分:2)

f()g()都声明为返回S类型的值,但实际上它们会使用整数值执行return

所以实际发生的是使用转换构造函数 S从整数自动创建类型S(int unused)的临时值。该函数将S::i递增2。

同样f()S类型的值作为参数,但它是calld,其值为T。因此,编译器会使用转换构造函数 S自动创建类型S(T unused)的临时值。该函数将S::i递增3。