我必须遵循以下代码:
#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)究竟是做什么的?我无法理解他们如何改变我的价值。 这两个陈述做了什么?
答案 0 :(得分:2)
f()
和g()
都声明为返回S
类型的值,但实际上它们会使用整数值执行return
。
所以实际发生的是使用转换构造函数 S
从整数自动创建类型S(int unused)
的临时值。该函数将S::i
递增2。
同样f()
将S
类型的值作为参数,但它是calld,其值为T
。因此,编译器会使用转换构造函数 S
自动创建类型S(T unused)
的临时值。该函数将S::i
递增3。