为什么在c++中调用基本类型的构造函数是合法的?
Why is it legal in C++ to call a constructor of a primitive type?
为什么下面的代码在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);
基本类型没有构造函数,你调用的是直接初始化
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 构造函数正在调用一个使用当前类类型的函数
- 具有默认模板类型的默认构造函数的类型推导
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 不命名构造函数和析构函数上的类型错误
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 有没有办法避免为 std::variant 类成员中的所有类型编写构造函数?
- 在 C++17 中调用具有不同参数类型的构造函数
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 无法推断类中的类型,构造函数采用 std::array
- 当类型适当的构造函数可用时,为什么一个编译器尝试使用已删除的副本构造函数
- 如何在参数中定义隐式类型转换的构造函数?
- C++ - 打印地图<结构,结构,构造函数>类型
- 继承构造函数+非默认构造函数类型的类内初始化失败
- c++ python构造函数类型错误(可能的命名空间问题)
- 具有构造函数类型转换和转换操作符的转换序列