以下代码的输出是什么?

时间:2013-07-17 19:47:44

标签: c++ struct

此代码发布于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

任何解释?

1 个答案:

答案 0 :(得分:20)

i(x);等同于i x;,并且引入了一对冗余的括号。它声明了一个名为x的{​​{1}}类型的变量,默认初始化;它不会创建i的临时实例,其中i作为构造函数的参数。另见:most vexing parse