繁体   English   中英

为什么这会调用默认构造函数?

[英]Why does this call the default constructor?

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); 可以解释为从intX ,或者
  • 什么都没有,因为X(answer); 可以解释为变量的声明。

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

奖励积分:我需要更改什么才能获得临时而非变量声明?

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

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

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

括号是可选的。 你说的与X answer;相同X answer; ,这是一份声明声明。

如果要声明X类型的变量,则应该这样做:

X y(answer);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM