【发布时间】:2012-07-27 15:31:50
【问题描述】:
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到X的转换,或者 - 什么都没有,因为
X(answer);可以解释为变量的声明。
但是,it prints X(),我不知道为什么X(answer); 会调用默认构造函数。
奖励积分:我需要更改哪些内容才能获得临时声明而不是变量声明?
【问题讨论】:
-
X((int)answer);但是会产生正确的结果。
-
@JTA 最后,
X(int(answer));不打印任何内容,因为它是一个函数声明 :) -
什么都没有,因为 X(answer);可以解释为变量的声明。该声明也将是一个定义,它会触发默认构造函数的执行...这反过来意味着您回答了自己的问题。
-
@David
double(expresso);好了,只为你声明 ;) -
@FredOverflow:我必须要有一个定义才能使用它,因为我感觉没有效果...
标签: c++ syntax most-vexing-parse