7

此代码发布于http://accu.org/index.php/cvujournal,2013 年 7 月发行。我无法理解输出,任何解释都会有帮助

#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

有什么解释吗?

4

1 回答 1

20

i(x);等价于i x;,带有一对多余的括号。它声明了一个名为xtype的变量i,默认初始化;它不会创建iwith的临时实例x作为构造函数的参数。另请参阅:最令人烦恼的解析

于 2013-07-17T19:58:36.277 回答