此代码发布于2013年7月发布的http://accu.org/index.php/cvujournal。 我无法理解输出,任何解释都是啰嗦
#include <iostream>
int x;
struct i
{
i() {
x = 0;
std::cout << "--C1\n";
}
i(int i) {
x = i;
std::cout << "--C2\n";
}
};
class l
{
public:
l(int i) : x(i) {}
void load() {
i(x);
}
private:
int x;
};
int main()
{
l l(42);
l.load();
std::cout << x << std::endl;
}
输出:
--C1
0
我在期待:
--C2
42
任何解释?
答案 0 :(得分:20)
i(x);
等同于i x;
,并且引入了一对冗余的括号。它声明了一个名为x
的{{1}}类型的变量,默认初始化;它不会创建i
的临时实例,其中i
作为构造函数的参数。另见:most vexing parse