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

标签 c++ syntax most-vexing-parse

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); 可以解释为变量的声明。

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

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

最佳答案

nothing at all, because X(answer); could be interpreted as the declaration of a variable.

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

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

关于c++ - 为什么这会调用默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11691021/

相关文章:

c++ - 尝试创建临时对象时出现奇怪的编译器错误

C++ 函数定义和变量声明不匹配?

c++ - gSoap - 将请求/响应提取为 XML 字符串

go - 为什么 Go 使用 ^ 而不是 ~ 来表示一元按位非?

c++ - 杂项临时对象 T()

c# - 空属性声明的区别

ruby - map(& :name) mean in Ruby? 是什么意思

c++ - 在 Linux 中使用 C++ 为 Windows CE 进行开发

C++:预计会出现很多失误:map 与 unordered_map

c++ - 字符串和特殊字符的奇怪现象