c++ - 删除构造函数和模板
问题描述
考虑以下:
template<typename T>
class A
{
public:
A(int a)
{}
A() = delete;
};
class B
{
public:
B()
{
A<int> a;
}
};
当然,这段代码无法编译,因为 B 类的构造函数试图默认构造 A 类对象,而我已明确删除了该构造函数。一切都很好。
但是,如果我将 B 设为类模板
template<typename T>
class A
{
public:
A(int a)
{}
A() = delete;
};
template<typename T>
class B
{
public:
B()
{
A<int> a;
}
};
然后代码确实编译了,看来我现在可以默认构造一个类 A 的实例。
为什么是这样?我错过了什么?
谢谢。
解决方案
哦!在尝试从模板实例化类之前,编译器似乎看不到错误。
实际上尝试创建 B<> 类型的对象会产生预期的错误。
对不起,如果我浪费了你的时间。
推荐阅读
- javascript - 无法使用 Angular Material 分页进行分页
- python - Autokeras 多输入预测失败
- html - 如何使用硒从下拉列表中选择选项?
- c# - 我可以防止删除特定的 RSA 密钥吗?
- angular - 如何从primeng multiSelect中删除复选框?
- python - Python Django 项目 - 在代码存储库中包含什么?
- javascript - 如何将幻灯片中的图像设为全宽?
- python - 使用 Python 从oddsportal.com 抓取数据
- python - Python Flask 应用程序发布图像并使用 cv2.imread 函数
- android - 如何更新事务中的多个节点(Firebase 实时数据库)