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); 可以解释为从 int 到 0x25181223123, 0x25181223123, 139 或 139 的转换
  • 什么都没有,因为 X 可以解释为变量的声明。

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

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

    最佳答案



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

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

  • (X(answer));
  • (X)answer;
  • static_cast<X>(answer)
  • X{answer}; (C++11)
  • []{ return X(answer); }(); (C++11,可能会产生复制)
  • void(), X(answer);
  • X((void(),answer));
  • true ? X(answer) : X();
  • if(X(answer), false){}
  • for(;X(answer), false;);
  • X(+answer);
  • 关于c++ - 为什么这会调用默认构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11691021/

    10-13 06:28