为什么在c++中调用基本类型的构造函数是合法的?

Why is it legal in C++ to call a constructor of a primitive type?

本文关键字:构造函数 类型 c++ 调用 为什么      更新时间:2023-10-16

为什么下面的代码在c++中是合法的?

bool a(false);

我是说,T a(VALUE)应该调用构造函数,对吧?我想它没有被解析为函数声明。但是bool是普通类型,它没有构造函数。是吗?

如果它是相关的,我使用Visual Studio 2012。

虽然bool是一个基本类型,因此没有构造函数,语言设计者引入了统一的初始化语法,适用于基本类型和类。这极大地简化了模板代码的编写,因为您可以继续使用

T tVar(initialVal);

语法,而不知道T(模板类型参数)是否为原语。这对模板设计人员来说是一个非常重要的好处,因为他们不再需要考虑模板类型参数是基元还是类。

这只是一种有效的语法,用于初始化POD类型,并具有与构造函数(甚至是复制构造函数)类似的行为。

例如:

bool a(false);
bool b(a);
bool c = bool(); // initializes to false
值得注意的是,在 中
int main(int argc, const char *argv[])
{
  bool f();
  return 0;
}

f是函数声明!

这与其他基本类型没有什么不同,例如

int a(5);

基本类型没有构造函数,你调用的是直接初始化

相关文章: