80
struct X
{
    X()    { std::cout << "X()\n";    }
    X(int) { std::cout << "X(int)\n"; }
};

const int answer = 42;

int main()
{
    X(answer);
}

我本来希望这可以打印

  • X(int), 因为X(answer);可以解释为从intto的转换X, 或
  • 什么都没有,因为X(answer);可以解释为变量的声明。

但是,它会打印X(),我不知道为什么X(answer);要调用默认构造函数。

奖励积分:我必须更改什么才能获得临时声明而不是变量声明?

4

3 回答 3

73

什么都没有,因为 X(answer); 可以解释为变量的声明。

你的答案隐藏在这里。如果你声明一个变量,你调用它的默认 ctor(如果非 POD 和所有这些东西)。

在您的编辑中:要获得一个临时的,您有几个选择:

于 2012-07-27T15:36:22.150 回答
66

括号是可选的。你说的X answer;和 是一样的,是声明语句。

于 2012-07-27T15:36:00.833 回答
9

如果你想声明一个 X 类型的变量,你应该这样做:

X y(answer);
于 2012-07-27T15:39:42.100 回答